home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Periodicals / CSMP / C.S.M.P. Digest, Issue 3.022 < prev    next >
Internet Message Format  |  1994-06-09  |  91KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-022
  3. Date: Mon, 2 May 94 13:41:49 MET DST
  4.  
  5. C.S.M.P. Digest             Mon, 02 May 94       Volume 3 : Issue 22
  6.  
  7. Today's Topics:
  8.  
  9.         Best way to handle Moveable Modals?
  10.         Can you set the folder in which SFGetFile will open?
  11.         Control Panels items font
  12.         Fixed Point Math on PowerMac
  13.         Keeping DialogPtr's in RAM after startup...
  14.         Metrowerks News from MacWEEK
  15.         WaitNextEvent Emulated on PoMac!?
  16.         X2Fix code generation bug still in SC++ 7.0
  17.  
  18.  
  19.  
  20. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  21. (pottier@clipper.ens.fr).
  22.  
  23. The digest is a collection of article threads from the internet newsgroup
  24. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  25. regularly and want an archive of the discussions.  If you don't know what a
  26. newsgroup is, you probably don't have access to it.  Ask your systems
  27. administrator(s) for details.  If you don't have access to news, you may
  28. still be able to post messages to the group by using a mail server like
  29. anon.penet.fi (mail help@anon.penet.fi for more information).
  30.  
  31. Each issue of the digest contains one or more sets of articles (called
  32. threads), with each set corresponding to a 'discussion' of a particular
  33. subject.  The articles are not edited; all articles included in this digest
  34. are in their original posted form (as received by our news server at
  35. nef.ens.fr).  Article threads are not added to the digest until the last
  36. article added to the thread is at least two weeks old (this is to ensure that
  37. the thread is dead before adding it to the digest).  Article threads that
  38. consist of only one message are generally not included in the digest.
  39.  
  40. The digest is officially distributed by two means, by email and ftp.
  41.  
  42. If you want to receive the digest by mail, send email to listserv@ens.fr
  43. with no subject and one of the following commands as body:
  44.     help                        Sends you a summary of commands
  45.     subscribe csmp-digest Your Name    Adds you to the mailing list
  46.     signoff csmp-digest            Removes you from the list
  47. Once you have subscribed, you will automatically receive each new
  48. issue as it is created.
  49.  
  50. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  51. Questions related to the ftp site should be directed to
  52. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  53. digest are available there.
  54.  
  55. Also, the digests are available to WAIS users as comp.sys.mac.programmer.src.
  56.  
  57.  
  58. -------------------------------------------------------
  59.  
  60. >From mahboud@aggroup.com (mahboud)
  61. Subject: Best way to handle Moveable Modals?
  62. Date: Fri, 08 Apr 1994 12:50:48 -0800
  63. Organization: AG Group, Inc.
  64.  
  65. Hi.
  66.  
  67. What's the best way to handle moveable modals?  Specifically, I want to be
  68. able to do process(application) switches (i.e. put my app in the
  69. background, while a moveable modal is foremost).
  70.  
  71. Prefereably I want to be able to do this by changing a filterproc, not by
  72. going through the main event loop.  I have tried putting WaitNextEvents in
  73. the ModalFilterProc, but it did some weird things.  One reason I want to
  74. use the filterproc is that I still want to call ModalDialog to handle the
  75. events in the window, so I don't have to worry about updates, etc..
  76.  
  77. Thanks,
  78.  
  79. mahboud
  80.  
  81. ps.  I already handle moving the dialog from within my filterproc.
  82.  
  83. - -------------------------------------------------------------
  84. Mahboud Zabetian
  85. mahboud@aggroup.com
  86. ag group, inc.
  87. 2540 camino diablo, suite 200
  88. walnut creek, ca 94596
  89. 510-937-7900 voice
  90. 510-937-2479 fax
  91. 510-937-6704 ara
  92. ftp.aggroup.com anonymous ftp
  93.  
  94. +++++++++++++++++++++++++++
  95.  
  96. >From mahboud@aggroup.com (mahboud)
  97. Date: Sun, 10 Apr 1994 14:50:00 -0800
  98. Organization: AG Group, Inc.
  99.  
  100. In article I wrote:
  101. > What's the best way to handle moveable modals?  Specifically, I want to be
  102. > able to do process(application) switches (i.e. put my app in the
  103. > background, while a moveable modal is foremost).
  104. > Prefereably I want to be able to do this by changing a filterproc, not by
  105. > going through the main event loop.  I have tried putting WaitNextEvents in
  106. > the ModalFilterProc, but it did some weird things.  One reason I want to
  107. > use the filterproc is that I still want to call ModalDialog to handle the
  108. > events in the window, so I don't have to worry about updates, etc..
  109.  
  110. In response to all the mail I got, telling me to use the main event loop
  111. and not a filter proc, I'd like to clarify a point.
  112.  
  113. I'd rather not use the main event loop, as I am retro fitting applications,
  114. one modal dialog at a time, and by adding to the filter proc of each
  115. existing dialog (most share the same filterproc), I would be making fewer
  116. changes overall.
  117.  
  118. -mahboud
  119. - -------------------------------------------------------------
  120. Mahboud Zabetian
  121. mahboud@aggroup.com
  122. ag group, inc.
  123. 2540 camino diablo, suite 200
  124. walnut creek, ca 94596
  125. 510-937-7900 voice
  126. 510-937-2479 fax
  127. 510-937-6704 ara
  128. ftp.aggroup.com anonymous ftp
  129.  
  130. +++++++++++++++++++++++++++
  131.  
  132. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  133. Date: Wed, 13 Apr 1994 23:24:46 GMT
  134. Organization: Apple Computer
  135.  
  136. mahboud, mahboud@aggroup.com writes:
  137. > I'd rather not use the main event loop, as I am retro fitting applications,
  138. > one modal dialog at a time, and by adding to the filter proc of each
  139. > existing dialog (most share the same filterproc), I would be making fewer
  140. > changes overall.
  141.  
  142. Given that you can't make them "modeless dialogs that won't let you switch to
  143. another window", you can get most of the functionality by modifying the
  144. filterProc. Users still won't be able to switch layers while your dialogs are
  145. up, unfortunately, because ModalDialog disables layer switching.
  146.  
  147. In your filterProc:
  148. * On mouseDown, call FindWindow. If the click is on the title bar of the
  149. window, call DragWindow. Then change the event record to a nullEvent.
  150. Optionally, you can also respond to command-clicks in other app windows'
  151. title bars by dragging those windows without activating them.
  152. * On update, check whether the target window is an application window other
  153. than the dialog. If so, call whatever application routine handles update
  154. events. If you don't do this, moving the dialog will leave permanent white
  155. areas behind where the dialog used to be, as well as denying background time
  156. to other apps (see the tech note "Pending Update Perils".)
  157.  
  158. --Jens Alfke
  159.   jens_alfke@powertalk              Rebel girl, rebel girl,
  160.             .apple.com              Rebel girl you are the queen of my world
  161.  
  162. +++++++++++++++++++++++++++
  163.  
  164. >From peter.lewis@info.curtin.edu.au (Peter N Lewis)
  165. Date: Fri, 15 Apr 1994 09:46:34 +0800
  166. Organization: NCRPDA, Curtin University
  167.  
  168. In article <1994Apr13.232446.4419@gallant.apple.com>, Jens Alfke
  169. <jens_alfke@powertalk.apple.com> wrote:
  170.  
  171. >mahboud, mahboud@aggroup.com writes:
  172. >> I'd rather not use the main event loop, as I am retro fitting applications,
  173. >> one modal dialog at a time, and by adding to the filter proc of each
  174. >> existing dialog (most share the same filterproc), I would be making fewer
  175. >> changes overall.
  176. >
  177. >Given that you can't make them "modeless dialogs that won't let you switch to
  178. >another window", you can get most of the functionality by modifying the
  179. >filterProc. Users still won't be able to switch layers while your dialogs are
  180. >up, unfortunately, because ModalDialog disables layer switching.
  181.  
  182. If you're going to do this, why not just write your own implementation of
  183. ModalDialog?  It's not that complicated, you just call WNE, and handle
  184. events (passing most of them to IsDialogEvent and DialogSelect).  You have
  185. the same disadvantage of ModalDialog in that you aren't going thru your
  186. main loop, so you can't handle AppleEvents and other things that would
  187. normally get processed.
  188.    Peter.
  189. _______________________________________________________________________
  190. Peter N Lewis <peter.lewis@info.curtin.edu.au>       Ph: +61 9 368 2055
  191.  
  192. +++++++++++++++++++++++++++
  193.  
  194. >From troy@i-link.com (Troy Gaul)
  195. Date: Fri, 15 Apr 1994 18:53:08 -0500
  196. Organization: I-Link, Ltd.
  197.  
  198. In article <peter.lewis-150494094634@rocky.curtin.edu.au>,
  199. peter.lewis@info.curtin.edu.au (Peter N Lewis) wrote:
  200.  
  201. > In article <1994Apr13.232446.4419@gallant.apple.com>, Jens Alfke
  202. > <jens_alfke@powertalk.apple.com> wrote:
  203. > >mahboud, mahboud@aggroup.com writes:
  204. > >> I'd rather not use the main event loop, as I am retro fitting applications,
  205. > >> one modal dialog at a time, and by adding to the filter proc of each
  206. > >> existing dialog (most share the same filterproc), I would be making fewer
  207. > >> changes overall.
  208. > >
  209. > >Given that you can't make them "modeless dialogs that won't let you switch to
  210. > >another window", you can get most of the functionality by modifying the
  211. > >filterProc. Users still won't be able to switch layers while your dialogs are
  212. > >up, unfortunately, because ModalDialog disables layer switching.
  213. > If you're going to do this, why not just write your own implementation of
  214. > ModalDialog?  It's not that complicated, you just call WNE, and handle
  215. > events (passing most of them to IsDialogEvent and DialogSelect).  You have
  216. > the same disadvantage of ModalDialog in that you aren't going thru your
  217. > main loop, so you can't handle AppleEvents and other things that would
  218. > normally get processed.
  219.  
  220. I've done this, and it's not too bad.  Makes retrofitting and still getting
  221. the AppleCorrect(tm) behavior fairly easy.
  222.  
  223. With a little thought (and depending on the design of your application),
  224. you can even get this secondary event loop to handle high level events (if
  225. appropriate).  This is left as an exercise for the reader. 
  226.  
  227. _troy
  228. //////// //////___Troy Gaul____________________________t-gaul@i-link.com__
  229. //
  230.   //    //       Infinity Systems ; West Des Moines, Iowa                
  231. //
  232.  //    //  //  "Good news is just life's way of keeping you off balance" //
  233. //    //////___________________________________________________________ //
  234.  
  235. +++++++++++++++++++++++++++
  236.  
  237. >From Vampire@crypt.demon.co.uk (Vampire)
  238. Date: Sun, 17 Apr 1994 09:10:37 GMT
  239. Organization: Pennangalan Software
  240.  
  241.  
  242. I've been watching this thread for a few days now...
  243.  
  244. The way I do this is a little Windows-inspired (don't all flame me, please...I
  245. HATE Windows...unfortunately my employers don't...
  246.  
  247. I have a main event loop. (Surprise!). When I want to go Movable Modal, I get
  248. the module with the Modal to create its Window as usual, then get it to call a
  249. function 'RegisterModal', with the main control module. This function simply
  250. registers a second event-loop (particular to the movable modal concerned), and
  251. sets an internal Boolean, 'InModal', to TRUE.
  252.  
  253. The main event-loop examines InModal, and if it is TRUE, ALWAYS passes the
  254. event onto the registered secondary event loop for handling. The secondary
  255. function returns TRUE or FALSE, depending upon whether it handled the event or
  256. not. If it didn't, the main-event loop can handle it as normal.
  257.  
  258. That way, the Movable Modal code gets to react to events concerning it, ignore
  259. events that don't (e.g. update a background window), and *pretend* to react to
  260. events it wants ignored (i.e. mousedowns in another Window of the same
  261. application).
  262.  
  263. =============================================================================
  264.                                   |"If I knock on your door, you're a fool;
  265.          VAMPIRE                  | if you invite me in, you're a dead fool"
  266.   (Pennangalan Software)          |  My dust resides @crypt.demon.co.uk
  267. =============================================================================
  268.  
  269. ---------------------------
  270.  
  271. >From blume@twg.com (David Blume)
  272. Subject: Can you set the folder in which SFGetFile will open?
  273. Date: Fri, 15 Apr 1994 00:28:03 GMT
  274. Organization: Gokuraku Videos - Wollongong Dept.
  275.  
  276. Can you set the folder in which SFGetFile and SFPutFile will open?
  277.  
  278. --David
  279. +---------------------------------------------------------------+
  280. |  David Blume    |  "I get tired thinking of all the things I  |
  281. |  blume@twg.com  |   don't want to do."  --Bukowski, _Barfly_  |
  282. +---------------------------------------------------------------+
  283.  
  284. +++++++++++++++++++++++++++
  285.  
  286. >From dubois@primate.wisc.edu (Paul DuBois)
  287. Date: 14 Apr 1994 20:38:06 -0500
  288. Organization: Castra Parvulorum
  289.  
  290. >From article <1994Apr15.002803.14161@twg.com>, by blume@twg.com (David Blume):
  291. > Can you set the folder in which SFGetFile and SFPutFile will open?
  292.  
  293. This is how I do it if I have an FSSpec:
  294.  
  295.     CurDirStore = fss.parID;
  296.     SFSaveDisk = -fss.vRefNum;
  297.  
  298. Note that you use the negative of the vRefNum.
  299.  
  300. I think this is horrendous, because it involves assigning values to
  301. two low-memory globals.  Is there another way to do it?
  302.  
  303. -- 
  304. Paul DuBois
  305. dubois@primate.wisc.edu
  306.  
  307. +++++++++++++++++++++++++++
  308.  
  309. >From stk@uropax.contrib.de (Stefan Kurth)
  310. Date: 17 Apr 1994 01:50:56 +0200
  311. Organization: Contributed Software GbR
  312.  
  313. In article <2okr5uINN970@uakari.primate.wisc.edu>,
  314. Paul DuBois <dubois@primate.wisc.edu> wrote:
  315.  
  316. >     CurDirStore = fss.parID;
  317. >     SFSaveDisk = -fss.vRefNum;
  318. > I think this is horrendous, because it involves assigning values to
  319. > two low-memory globals.
  320.  
  321. Exactly.
  322.  
  323. > Is there another way to do it?
  324.  
  325. If you can require System 7, yes. (the original poster asked about
  326. SFGetFile, so maybe this won't help him). Do a CustomGetFile; in your
  327. dlgHook you check for sfHookFirstCall, and if you receive it, change your
  328. reply record to whatever location you want to have displayed, and return
  329. sfHookChangeSelection. This has the additional advantage that you can
  330. specify a certain file to be selected.
  331.  
  332. (You'll have to pass the address of the reply record in the yourDataPtr
  333. parameter if you don't want to make it a global var).
  334.  
  335. _____________________________________________________________________
  336. Stefan Kurth              Berlin, Germany              stk@contrib.de
  337.  
  338. +++++++++++++++++++++++++++
  339.  
  340. >From pottier@kayak.ens.fr (Francois Pottier)
  341. Date: 17 Apr 1994 21:24:12 GMT
  342. Organization: Ecole Normale Superieure, PARIS, France
  343.  
  344. In article <2optl1$57h@uropax.contrib.de>,
  345. Stefan Kurth <stk@uropax.contrib.de> wrote:
  346.  
  347. >dlgHook you check for sfHookFirstCall, and if you receive it, change your
  348. >reply record to whatever location you want to have displayed, and return
  349. >sfHookChangeSelection. This has the additional advantage that you can
  350. >specify a certain file to be selected.
  351.  
  352. If you want this to work, you also have to set sfScript to 0.
  353. I know it isn't mentioned in Inside Mac, but it's true. Took
  354. me days to figure out (thanks to Jon Watte's FAQ for pointing
  355. it out!)
  356.  
  357. -- 
  358. Francois Pottier
  359. pottier@dmi.ens.fr
  360.  
  361. ---------------------------
  362.  
  363. >From alex@metcalf.demon.co.uk (Alex Metcalf)
  364. Subject: Control Panels items font
  365. Date: Fri, 8 Apr 1994 23:20:33 GMT
  366. Organization: Demon Internet
  367.  
  368.  
  369. This is a slightly dumb question...
  370.  
  371. How do you set the font for the DITL resource for a control panel? I've
  372. often opened up ResEdit to find the control panel's DITL displayed in
  373. Geneva 9 (such as check boxes and static text), but I can't seem to change
  374. from the default Chicago 12.
  375.  
  376. Thanks,
  377.  
  378.  
  379. Alex
  380.  
  381. --
  382. Alex Metcalf, Mac programmer in C, C++, HyperTalk, assembler
  383.  
  384. Internet, AOL, BIX: alex@metcalf.demon.co.uk            "Surely you
  385. AppleLink:          alex@metcalf.demon.co.uk@internet#   can't be
  386. CompuServe:         INTERNET:alex@metcalf.demon.co.uk    serious?"
  387. Delphi:             alex@metcalf.demon.co.uk@inet#
  388. FirstClass:         alex@metcalf.demon.co.uk,Internet   "I'm serious...
  389. Fax (UK):           (0570) 45636                         and don't call
  390. Fax (US / Canada):  011 44 570 45636                     me Shirley."
  391.  
  392. +++++++++++++++++++++++++++
  393.  
  394. >From bjaques@vanbc.wimsey.com (Barton Jaques)
  395. Date: 10 Apr 1994 20:43:53 GMT
  396. Organization: Wimsey Information Services
  397.  
  398. In article <alex-090494002008@metcalf.demon.co.uk>,
  399. alex@metcalf.demon.co.uk (Alex Metcalf) wrote:
  400.  
  401. > How do you set the font for the DITL resource for a control panel? I've
  402. > often opened up ResEdit to find the control panel's DITL displayed in
  403. > Geneva 9 (such as check boxes and static text), but I can't seem to change
  404. > from the default Chicago 12.
  405.  
  406. In your cdev code, just set TextFont() to whatever you desire, before any
  407. drawing is done. Be sure to change it back whenever your code exits.
  408. You can change the ResEdit view font under "View As …" in the DITL editor.
  409. That only changes how it appears in ResEdit, though; it has no effect on
  410. the DITL resource contents.
  411. -- 
  412. bjaques@wimsey.com
  413.  
  414. +++++++++++++++++++++++++++
  415.  
  416. >From Reid Ellis <rae@alias.com>
  417. Date: Sat, 16 Apr 1994 03:47:27 GMT
  418. Organization: Alias Research, Inc., Toronto ON Canada
  419.  
  420. Alex Metcalf <alex@metcalf.demon.co.uk> asks:
  421. |How do you set the font for the DITL resource for a control panel?
  422.  
  423. Barton Jaques <bjaques@vanbc.wimsey.com> replies:
  424. |In your cdev code, just set TextFont() to whatever you desire, before
  425. |any drawing is done. Be sure to change it back whenever your code
  426. |exits.
  427.  
  428. Alternatively, include a 'finf' resource, id=-4049, and set its three
  429. 16-bit ints to the font id, style, and size you want [in that order].
  430.  
  431. Caveat: I've been having problems with 'useWFont' popup menus in
  432. combination with the 'finf' resource under System 7.0 [it's fine under
  433. System 7.1]
  434.  
  435. Reid
  436. --
  437. - -
  438. Reid Ellis, Alias Research Inc.
  439. +1 416 362 9181 <rae@Alias.com>
  440.  
  441. ---------------------------
  442.  
  443. >From Willie Rauchwerger <willie-rauchwerger@uokhsc.edu>
  444. Subject: Fixed Point Math on PowerMac
  445. Date: 6 Apr 1994 21:22:02 GMT
  446. Organization: OU Health Sciences Center
  447.  
  448. My image manipluation software uses fixed-point math for matrix
  449. math. However, in my PowerPC port, I am getting hardly no
  450. performance boost (seems slower to me) when I hit the matrix
  451. calcuations.
  452.  
  453. After running TrapsCheck (very cool stuff), I find that the Fixed
  454. point math routines are not native. Ugh.
  455.  
  456. After deciding not to do floating point because of speed, finding
  457. that Fixed-point calculations are slower now is not too funny. 
  458. I would like to keep it using fixed point so that I can get good
  459. performance regardless of processor.
  460.  
  461. Any ideas aobut how to get around this? Any ideas when the Fixed
  462. point routines  will be native?
  463.  
  464. Any separate libraries to do fixed point calculations?
  465.  
  466. - -----------------------------------------------------------------
  467. Willie Rauchwerger         AppleLink: Willie
  468. Telemedicine Software Guy  Internet:  willie-rauchwerger@uokhsc.edu
  469. OU Health Sciences Center
  470.  
  471. +++++++++++++++++++++++++++
  472.  
  473. >From zstern@adobe.com (Zalman Stern)
  474. Date: Wed, 6 Apr 1994 22:50:44 GMT
  475. Organization: Adobe Systems Incorporated
  476.  
  477. Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes
  478. > My image manipluation software uses fixed-point math for matrix
  479. > math. However, in my PowerPC port, I am getting hardly no
  480. > performance boost (seems slower to me) when I hit the matrix
  481. > calcuations.
  482. > After running TrapsCheck (very cool stuff), I find that the Fixed
  483. > point math routines are not native. Ugh.
  484.  
  485. Fixed point routines are not handled via traps for native code. Rather they  
  486. are in the shared library InterfaceLib. This is a godd idea as already in  
  487. 68K land people were using skanky hacks to get around the trap dispatcher  
  488. overhead for the fixed-point math code.
  489.  
  490. For emulated code, the cost of doing a mixed mode switch to native mode  
  491. outweighs the benefit of faster antive mode execution. (Especially since the  
  492. emualtor is going to be executing native multiply instructions anyway at the  
  493. bottom level.)
  494. --
  495. Zalman Stern           zalman@adobe.com            (415) 962 3824
  496. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  497. "Do right, and risk consequences." Motto of Sam Houston (via Molly Ivins)
  498.  
  499. +++++++++++++++++++++++++++
  500.  
  501. >From fixer@faxcsl.dcrt.nih.gov (Chris Gonna' Find Ray Charles Tate)
  502. Date: Wed, 6 Apr 1994 23:46:17 GMT
  503. Organization: DCRT, NIH, Bethesda, MD
  504.  
  505. In article <1994Apr6.225044.12892@adobe.com>, zstern@adobe.com (Zalman Stern) writes:
  506. >Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes
  507. >>
  508. >> My image manipluation software uses fixed-point math for matrix
  509. >> math. However, in my PowerPC port, I am getting hardly no
  510. >> performance boost (seems slower to me) when I hit the matrix
  511. >> calcuations.
  512. >
  513. >For emulated code, the cost of doing a mixed mode switch to native mode  
  514. >outweighs the benefit of faster native mode execution. (Especially since the  
  515. >emualtor is going to be executing native multiply instructions anyway at the  
  516. >bottom level.)
  517.  
  518. Is fixed-point still going to be faster on the PowerPC than floating-
  519. point?  It may not, since the PPC's floating-point unit is so much
  520. faster than (say) the MC6888x's.  If someone could come up with some
  521. hard figures for this, it'd be handy.  Zalman?  Anyone?
  522.  
  523. (I *think* I remember hearing that for most things - like, anything
  524. more complex than loop counting and such - floating-point is going to
  525. be faster on the PPC than integer math.  Am I right, or hallucinating
  526. again?)
  527.  
  528. - -------------------------------------------------------------------
  529. Christopher Tate             |   "Blue ice cubes?  How degenerate!"
  530. MSD, Inc.                    |
  531. fixer@faxcsl.dcrt.nih.gov    |    < anybody recognize the source? >
  532.  
  533. +++++++++++++++++++++++++++
  534.  
  535. >From jwbaxter@olympus.net (John W. Baxter)
  536. Date: Wed, 06 Apr 1994 18:24:34 -0700
  537. Organization: Internet for the Olympic Peninsula
  538.  
  539. In article <1994Apr6.234617.11486@alw.nih.gov>, fixer@faxcsl.dcrt.nih.gov
  540. (Chris Gonna' Find Ray Charles Tate) wrote:
  541.  
  542. > Is fixed-point still going to be faster on the PowerPC than floating-
  543. > point?  It may not, since the PPC's floating-point unit is so much
  544. > faster than (say) the MC6888x's.  If someone could come up with some
  545. > hard figures for this, it'd be handy.  Zalman?  Anyone?
  546. > (I *think* I remember hearing that for most things - like, anything
  547. > more complex than loop counting and such - floating-point is going to
  548. > be faster on the PPC than integer math.  Am I right, or hallucinating
  549. > again?)
  550.  
  551. It seems to me that working out the details is going to be tough, and
  552. variable over time.  I *suspect* that switching *some* operations to
  553. floating point will speed things up, just because the processor can do more
  554. things at once that way.  IF you're looking at code which has had
  555. instruction scheduling applied to it, and IF the compiler you are using
  556. does a good job of that (that's the part likely to vary over time).
  557.  
  558. Bottom line:  beware the quick and dirty "benchmark" in this area.  For
  559. now, write your code in the most convenient (for
  560. writing/understanding/maintenance) way.  [There was a flap a while back
  561. about one of the compilers not strength-reducing loops over arrays from
  562. multiplies to adds.  My particular quick and dirty "benchmark" (not to be
  563. trusted) suggested that on PPC it makes no difference (so why should the
  564. compiler bother, except to avoid folks complaining about "poor
  565. optimization").]
  566. -- 
  567. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  568.    jwbaxter@pt.olympus.net
  569.  
  570. +++++++++++++++++++++++++++
  571.  
  572. >From johnmce@world.std.com (John McEnerney)
  573. Date: Thu, 7 Apr 1994 16:35:02 GMT
  574. Organization: The World Public Access UNIX, Brookline, MA
  575.  
  576. [There was a flap a while back
  577. about one of the compilers not strength-reducing loops over arrays from
  578. multiplies to adds.  My particular quick and dirty "benchmark" (not to be
  579. trusted) suggested that on PPC it makes no difference (so why should the
  580. compiler bother, except to avoid folks complaining about "poor
  581. optimization").]
  582.  
  583. Floating-point adds take about the same time as multiplies (1 more cycle 
  584. unless it is single-precision). Integer adds are -considerably- quicker 
  585. than integer multiples: 1 cycle vs. 5 or 9.
  586.  
  587. > Is fixed-point still going to be faster on the PowerPC than floating-
  588. > point? 
  589.  
  590. Again, it depends on the distribution of the operations. Integer 
  591. multiplies and divides are -way- slower than floating-point. Adds/subs 
  592. are -way- faster.
  593.  
  594. For any compiler that does instruction scheduling, you'll probably get 
  595. better results using floating-point, because the floating-point 
  596. arithmetic can operate in parallel with the integer instructions used for 
  597. loops, branches, etc.
  598.  
  599. -- John
  600.  
  601.  
  602.  
  603. +++++++++++++++++++++++++++
  604.  
  605. >From 103t_english@west.cscwc.pima.edu
  606. Date: 8 Apr 94 01:19:50 MST
  607. Organization: (none)
  608.  
  609. In article <2nv95q$5at@romulus.ucs.uoknor.edu>, Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
  610. > My image manipluation software uses fixed-point math for matrix
  611. > math. However, in my PowerPC port, I am getting hardly no
  612. > performance boost (seems slower to me) when I hit the matrix
  613. > calcuations.
  614. > After running TrapsCheck (very cool stuff), I find that the Fixed
  615. > point math routines are not native. Ugh.
  616. > After deciding not to do floating point because of speed, finding
  617. > that Fixed-point calculations are slower now is not too funny. 
  618. > I would like to keep it using fixed point so that I can get good
  619. > performance regardless of processor.
  620. > Any ideas aobut how to get around this? Any ideas when the Fixed
  621. > point routines  will be native?
  622. > Any separate libraries to do fixed point calculations?
  623. > -------------------------------------------------------------------
  624. > Willie Rauchwerger         AppleLink: Willie
  625. > Telemedicine Software Guy  Internet:  willie-rauchwerger@uokhsc.edu
  626. > OU Health Sciences Center
  627.  
  628. Since you are claiming a need for critical speed, I wonder why you bother with
  629. the overhead of the Fixed-Point trap  on the 68K side anyways?
  630.  
  631. Rolling your own 68k fixedpoint routines will save you 100+ CPU cycles for
  632. every fixed-point call as that is the overhead of the trap dispatcher.
  633.  
  634. As I understand it, there is no trap dispatcher on the PowerMac: the emulator
  635. does it automatically. However, that don't mean that you should be happy with
  636. the result either way.
  637.  
  638. Having read this thread backwards, I note that the PowerMac doesn't do native
  639. fixed point due to the overhead from the Mixed Mode manager. Why not roll your
  640. own routines for both 68K and PowerMac and use each as it is appropriate,
  641. thereby avoiding the trap dispatcher on the 68k Macs and the emulator overhead
  642. on the PowerMacs?
  643.  
  644.  
  645. Lawson
  646.  
  647. +++++++++++++++++++++++++++
  648.  
  649. >From d88-jwa@hemul.nada.kth.se (Jon W‰tte)
  650. Date: 8 Apr 1994 09:58:42 GMT
  651. Organization: The Royal Institute of Technology
  652.  
  653. >fixed point due to the overhead from the Mixed Mode manager. Why not roll your
  654. >own routines for both 68K and PowerMac and use each as it is appropriate,
  655. >thereby avoiding the trap dispatcher on the 68k Macs and the emulator overhead
  656. >on the PowerMacs?
  657.  
  658. Why not define macros for your data representation and manipulation,
  659. and have it use single-precision floats on the PPC and fixeds on 68K?
  660. That way, you get the superior math performance on the PPC (where
  661. float multiplies/divides are faster than integer) and keep the speed
  662. on the 68K. And, yes, implementing your own fixed math macros is
  663. pretty much a must.
  664. -- 
  665.  -- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
  666.  
  667.    This article printed on 100% recycled electrons.
  668.  
  669. +++++++++++++++++++++++++++
  670.  
  671. >From Willie Rauchwerger <willie-rauchwerger@uokhsc.edu>
  672. Date: 8 Apr 1994 14:42:46 GMT
  673. Organization: OU Health Sciences Center
  674.  
  675. In article <2o39si$673@news.kth.se> Jon W!tte, d88-jwa@hemul.nada.kth.se
  676. writes:
  677. >Why not define macros for your data representation and manipulation,
  678. >and have it use single-precision floats on the PPC and fixeds on 68K?
  679. >That way, you get the superior math performance on the PPC (where
  680. >float multiplies/divides are faster than integer) and keep the speed
  681. >on the 68K. And, yes, implementing your own fixed math macros is
  682. >pretty much a must.
  683.  
  684. OK. It is obvious to me that I need to roll my own fixed point routines.
  685. My question is whether there are any out there right now that people
  686. have used to get around the trap overhead, or do I really need to roll
  687. my own. (I think I can handle most of it, but I worry about it being
  688. entirrly correct, and those trig functions...)
  689.  
  690. My next question is, how can floating point be faster than integer
  691. math on the PowerPC (or any processor for that matter)? It would
  692. seem to me that no matter how fast fp is, integer should faster -
  693. otherwise, should I start using fp for counters, etc. :-)
  694.  
  695. - -----------------------------------------------------------------
  696. Willie Rauchwerger         AppleLink: Willie
  697. Telemedicine Software Guy  Internet:  willie-rauchwerger@uokhsc.edu
  698. OU Health Sciences Center
  699.  
  700. +++++++++++++++++++++++++++
  701.  
  702. >From d88-jwa@dront.nada.kth.se (Jon W‰tte)
  703. Date: 8 Apr 1994 15:40:13 GMT
  704. Organization: The Royal Institute of Technology
  705.  
  706. In <2o3qh6$b2c@romulus.ucs.uoknor.edu> Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
  707.  
  708. >My next question is, how can floating point be faster than integer
  709. >math on the PowerPC (or any processor for that matter)? It would
  710. >seem to me that no matter how fast fp is, integer should faster -
  711. >otherwise, should I start using fp for counters, etc. :-)
  712.  
  713. The integer unit is not designed the same as the floating-point
  714. unit, and the FP unit kicks some serious butt.
  715.  
  716. The only thing preventing you from using floating point registers
  717. for counters is that you can't index using floating-point registers,
  718. and the conversion to integer is slow. Else, go ahead! (addition
  719. and subtraction of course aren't faster in FP, but multiply and
  720. divide are)
  721.  
  722. Cheers,
  723.  
  724.                     / h+
  725. -- 
  726.  -- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
  727.  "If people bought cars according to the same principles they buy computers,
  728.   cars would behave like Lamborghinis but would be built and look like Yugos."
  729.                      -- Craig Fields
  730.  
  731. +++++++++++++++++++++++++++
  732.  
  733. >From rmcassid@uci.edu (Robert Cassidy)
  734. Date: Fri, 08 Apr 1994 09:45:15 -0700
  735. Organization: TLG Project
  736.  
  737. In article <2o3tst$99f@news.kth.se>, d88-jwa@dront.nada.kth.se (Jon Wtte)
  738. wrote:
  739.  
  740. > In <2o3qh6$b2c@romulus.ucs.uoknor.edu> Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
  741. > >My next question is, how can floating point be faster than integer
  742. > >math on the PowerPC (or any processor for that matter)? It would
  743. > >seem to me that no matter how fast fp is, integer should faster -
  744. > >otherwise, should I start using fp for counters, etc. :-)
  745. > The integer unit is not designed the same as the floating-point
  746. > unit, and the FP unit kicks some serious butt.
  747. > The only thing preventing you from using floating point registers
  748. > for counters is that you can't index using floating-point registers,
  749. > and the conversion to integer is slow. Else, go ahead! (addition
  750. > and subtraction of course aren't faster in FP, but multiply and
  751. > divide are)
  752.  
  753. Doesn't the integer unit handle all of the register loading as well?
  754. Wouldn't that be even more incentive to use the fp unit in certain
  755. instances?
  756.  
  757. -- 
  758. Robert Cassidy
  759. TLG Project
  760. UC Irvine
  761.  
  762. Let's hope 'Information SuperTollroad' isn't the catchphrase of the next
  763. decade...
  764.  
  765. +++++++++++++++++++++++++++
  766.  
  767. >From cforden@netcom.com (Chris Forden)
  768. Date: Fri, 8 Apr 1994 16:57:41 GMT
  769. Organization: NETCOM On-line Communication Services (408 241-9760 guest)
  770.  
  771. Excerpted from my upcoming article in the May issue of
  772. MacTech--
  773.  
  774. Clever programmers of 68K Macs have done the fastest
  775. calculations with integer arithmetic.  For instance, the
  776. calculation of screen position of 2D CAD objects can be done
  777. quickest using the long (32 bit) integer arithmetic available
  778. on the 68020 and better.  (The FixMath routines in those
  779. machines’s ROM automatically make use of the extended
  780. instructions.)  Some programmers were even willing to put up
  781. the aggravation of doing all the worst-case analyses of
  782. overflow and underflow needed to use fixed-point math routines
  783. reliably.
  784.  
  785. However, on the PowerPC, the floating point performance is so
  786. much improved that now one gets faster execution by using
  787. floating point routines than by using fixed point arithmetic in
  788. any case where precautions would need to be taken against
  789. overflow error or precision loss due to underflow.  Those two
  790. enemies of integer arithmetic–  overflow and underflow–  ravage
  791. more fixed point math schemes than programmers expect a priori.
  792.  Therefore calculating with floating point is generally much
  793. easier than adapting fixed-point arithmetic to one’s needs.
  794.  
  795. So how much faster is floating point?  A friend of mine timed
  796. various implementations of an FFT-based image processing
  797. algorithm running on several Mac platforms.  Here are his 
  798. results tabularized, including single precision floating point,
  799. for  a one-way 512 x 512 FFT:
  800.  
  801.              IIci w/cache       Power Mac proto
  802.              ------------       ---------------
  803. integer      52 sec             14.5 sec
  804. single float 80 sec             3   sec
  805.  
  806. Integer arithmetic on the Power Mac prototype was about the 
  807. same as the Quadra 840av’s, but single precision float on the
  808. Power Mac was 4.5 times faster than the faster (integer with 
  809. special long mul assembly) arithmetic on Q840av.  We were using
  810. a bottom-of-the-line Power Mac prototype, running at only 50
  811. MHz.
  812.  
  813. Double-precision floating point on the PowerPC is only 0% to 20%
  814. slower than single-precision floating point.  The 64 bits of
  815. the double-precision format mean you have great freedom from
  816. precision loss.  The PowerPC also has a multiply-and-add
  817. instruction, often called “multiply and accumulate”.  It
  818. combines a multiplication and an addition into a single
  819. instruction.  Many signal processing programs for audio or
  820. images can make heavy use of that instruction, which optimizing
  821. -- 
  822. cforden@netcom.com 's self-referential signature quote:  "Huh?"
  823.  
  824. +++++++++++++++++++++++++++
  825.  
  826. >From 103t_english@west.cscwc.pima.edu
  827. Date: 9 Apr 94 16:30:50 MST
  828. Organization: (none)
  829.  
  830. In article <2o3qh6$b2c@romulus.ucs.uoknor.edu>, Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
  831. > In article <2o39si$673@news.kth.se> Jon W!tte, d88-jwa@hemul.nada.kth.se
  832. > writes:
  833. >>Why not define macros for your data representation and manipulation,
  834. >>and have it use single-precision floats on the PPC and fixeds on 68K?
  835. >>That way, you get the superior math performance on the PPC (where
  836. >>float multiplies/divides are faster than integer) and keep the speed
  837. >>on the 68K. And, yes, implementing your own fixed math macros is
  838. >>pretty much a must.
  839. > OK. It is obvious to me that I need to roll my own fixed point routines.
  840. > My question is whether there are any out there right now that people
  841. > have used to get around the trap overhead, or do I really need to roll
  842. > my own. (I think I can handle most of it, but I worry about it being
  843. > entirrly correct, and those trig functions...)
  844. > My next question is, how can floating point be faster than integer
  845. > math on the PowerPC (or any processor for that matter)? It would
  846. > seem to me that no matter how fast fp is, integer should faster -
  847. > otherwise, should I start using fp for counters, etc. :-)
  848. FP adds and subtracts are every bit as fast as fixed point adds and subtracts.
  849. In fact, I understand that it is possible to get extra speed out of the 601 by
  850. using fp indexes in loops...
  851.  
  852. Lawson
  853.  
  854. +++++++++++++++++++++++++++
  855.  
  856. >From jwbaxter@olympus.net (John W. Baxter)
  857. Date: Thu, 14 Apr 1994 01:14:02 -0700
  858. Organization: Internet for the Olympic Peninsula
  859.  
  860. In article <2nv95q$5at@romulus.ucs.uoknor.edu>, Willie Rauchwerger
  861. <willie-rauchwerger@uokhsc.edu> wrote:
  862.  
  863. > After deciding not to do floating point because of speed...
  864.  
  865. A preconception which has long been true, on a wide variety of hardware. 
  866. But...you may well find that using float (the 4-byte form) on PPC is the
  867. right way to go.  Run your time trials on your program built that way (and
  868. let us know how they come out).  [Enabling the Instruction Scheduling
  869. optimization could well be important here.  If you're using a compiler
  870. which does it well or even semi-well.]
  871.  
  872. -- 
  873. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  874.    jwbaxter@pt.olympus.net
  875.  
  876. +++++++++++++++++++++++++++
  877.  
  878. >From Dave Falkenburg <falken@apple.com>
  879. Date: Fri, 15 Apr 1994 16:30:31 GMT
  880. Organization: Apple Computer, Inc.
  881.  
  882. In article <1994Apr8.011950.1@west.cscwc.pima.edu> ,
  883. 103t_english@west.cscwc.pima.edu writes:
  884. >Having read this thread backwards, I note that the PowerMac doesn't do
  885. native
  886. >fixed point due to the overhead from the Mixed Mode manager. Why not
  887. roll your
  888. >own routines for both 68K and PowerMac and use each as it is appropriate,
  889. >thereby avoiding the trap dispatcher on the 68k Macs and the emulator
  890. overhead
  891. >on the PowerMacs?
  892.  
  893. Many of the FixMath routines are "split" traps, which do not support
  894. patching
  895. anymore. On PowerPC, they are implemented inside InterfaceLib directly,
  896. and
  897. are not called through the trap dispatcher...
  898.  
  899. -Dave Falkenburg
  900. -Apple Computer, Inc.
  901.  
  902. +++++++++++++++++++++++++++
  903.  
  904. >From 103t_english@west.cscwc.pima.edu
  905. Date: 17 Apr 94 08:09:19 MST
  906. Organization: (none)
  907.  
  908. In article <1994Apr15.163031.5662@gallant.apple.com>, Dave Falkenburg <falken@apple.com> writes:
  909. > In article <1994Apr8.011950.1@west.cscwc.pima.edu> ,
  910. > 103t_english@west.cscwc.pima.edu writes:
  911. >>Having read this thread backwards, I note that the PowerMac doesn't do
  912. > native
  913. >>fixed point due to the overhead from the Mixed Mode manager. Why not
  914. > roll your
  915. >>own routines for both 68K and PowerMac and use each as it is appropriate,
  916. >>thereby avoiding the trap dispatcher on the 68k Macs and the emulator
  917. > overhead
  918. >>on the PowerMacs?
  919. > Many of the FixMath routines are "split" traps, which do not support
  920. > patching
  921. > anymore. On PowerPC, they are implemented inside InterfaceLib directly,
  922. > and
  923. > are not called through the trap dispatcher...
  924. > -Dave Falkenburg
  925. > -Apple Computer, Inc.
  926.  
  927. I take it that they are "native" then?
  928.  
  929.  
  930. Lawson
  931.  
  932. ---------------------------
  933.  
  934. >From rrose@CSOS.ORST.EDU (-= Godfather Moof =-)
  935. Subject: Keeping DialogPtr's in RAM after startup...
  936. Date: 13 Apr 1994 23:44:59 GMT
  937. Organization: CS Outreach Services, Oregon State University, Corvallis, OR, USA
  938.  
  939. I'm writing an INIT that I would like to load a DialogPtr into ram at 
  940. startup so that the trap macro I am patching can use it later.  So far
  941. I've tryed converting the ptr to a handle and locking the handle, but without
  942. success.  I've tryed just opening up the file the Dialog Box is located in,
  943. but that's to much of a hassle in case the dialog resource gets deleted,
  944. (which it might).
  945.  
  946. Can anyone help?
  947.  
  948.  
  949.  
  950.                                                                    /-/
  951.              Dogcow lives...                                   ___/ /__
  952.                                                               /__  ___/
  953.              Godfather Moof:                                  | / /| |
  954.              rrose@csos.orst.edu                              |/_/ | |
  955.                                                               | |  | |
  956.              He'll make you an offer you can't refuse.        | |    |
  957.                                                                 |
  958.  
  959. +++++++++++++++++++++++++++
  960.  
  961. >From zobkiw@datawatch.com (joe zobkiw)
  962. Date: Thu, 14 Apr 1994 20:41:09 GMT
  963. Organization: Datawatch Corporation
  964.  
  965. In article <2oi05r$jco@jadzia.CSOS.ORST.EDU>, rrose@CSOS.ORST.EDU (-=
  966. Godfather Moof =-) wrote:
  967.  
  968. > I'm writing an INIT that I would like to load a DialogPtr into ram at 
  969. > startup so that the trap macro I am patching can use it later.  So far
  970. > I've tryed converting the ptr to a handle and locking the handle, but without
  971. > success.  I've tryed just opening up the file the Dialog Box is located in,
  972. > but that's to much of a hassle in case the dialog resource gets deleted,
  973. > (which it might).
  974.  
  975. Forget abou it. Simply (at INIT time) call the following routine (passing
  976. CurResFile() as the refNum) to learn where your INIT is. Then, in your
  977. patch, when you need access to your resources, simply open the INIT file
  978. and use the resources. Don't forget to close it when you are done.
  979.  
  980. OSErr FindFileSpec(short refNum, short *foundVRefNum, long *foundDirID,
  981. unsigned char *fileName)
  982. {
  983.     FCBPBRec        pb;
  984.     OSErr           err = noErr;
  985.     
  986.     pb.ioCompletion = NULL;
  987.     pb.ioNamePtr = fileName;
  988.     pb.ioVRefNum = 0;
  989.     pb.ioRefNum = refNum;
  990.     pb.ioFCBIndx = 0;
  991.     
  992.     err = PBGetFCBInfoSync(&pb);
  993.     
  994.     *foundVRefNum = pb.ioFCBVRefNum;
  995.     *foundDirID = pb.ioFCBParID;
  996.             
  997.     return err;
  998. }
  999.  
  1000. ___________________________________________________________
  1001. _/_/_/_/   Joe Zobkiw                                   ,,,
  1002.     _/     Senior Software Engineer                     - -
  1003.   _/       Datawatch Corporation                         L
  1004. _/_/_/_/   zobkiw@datawatch.com                          -
  1005.  
  1006. +++++++++++++++++++++++++++
  1007.  
  1008. >From petm@soda.berkeley.edu (Peter Mattis)
  1009. Date: 16 Apr 1994 23:29:00 GMT
  1010. Organization: Computer Science Undergrad Assoc., UCBerkeley
  1011.  
  1012. In article <zobkiw-140494154109@zobkiw.datawatch.com>,
  1013. joe zobkiw <zobkiw@datawatch.com> wrote:
  1014. >In article <2oi05r$jco@jadzia.CSOS.ORST.EDU>, rrose@CSOS.ORST.EDU (-=
  1015. >Godfather Moof =-) wrote:
  1016. >
  1017. >> I'm writing an INIT that I would like to load a DialogPtr into ram at 
  1018. >> startup so that the trap macro I am patching can use it later.  So far
  1019. >> I've tryed converting the ptr to a handle and locking the handle, but without
  1020. >> success.  I've tryed just opening up the file the Dialog Box is located in,
  1021. >> but that's to much of a hassle in case the dialog resource gets deleted,
  1022. >> (which it might).
  1023. >> 
  1024. >
  1025. >Forget abou it. Simply (at INIT time) call the following routine (passing
  1026. >CurResFile() as the refNum) to learn where your INIT is. Then, in your
  1027. >patch, when you need access to your resources, simply open the INIT file
  1028. >and use the resources. Don't forget to close it when you are done.
  1029. [SNIP]
  1030.  
  1031. Yes, but what happens if the user moves the init file? (Hmm...bit of a
  1032. problem, isn't it?)
  1033.  
  1034. The method I used for displaying a dialog box in the manner you
  1035. describe is to get the handle to the 'DITL' (dialog items list) resource
  1036. at start time. Remember to call DetachResource and HLock the handle.
  1037. This handle can then be used in a call to NewDialog to create a dialog
  1038. with the your items in it.
  1039.  
  1040. Be careful and make sure the item list doesn't get deleted somewhere
  1041. along the line.
  1042.  
  1043. -Peter Mattis
  1044.  
  1045. +++++++++++++++++++++++++++
  1046.  
  1047. >From ari@world.std.com (Ari I Halberstadt)
  1048. Date: Sun, 17 Apr 1994 03:22:03 GMT
  1049. Organization: The World Public Access UNIX, Brookline, MA
  1050.  
  1051. In article <2opsbs$jed@agate.berkeley.edu>,
  1052. Peter Mattis <petm@soda.berkeley.edu> wrote:
  1053. >
  1054. >The method I used for displaying a dialog box in the manner you
  1055. >describe is to get the handle to the 'DITL' (dialog items list) resource
  1056. >at start time. Remember to call DetachResource and HLock the handle.
  1057. >This handle can then be used in a call to NewDialog to create a dialog
  1058. >with the your items in it.
  1059. >
  1060. >Be careful and make sure the item list doesn't get deleted somewhere
  1061. >along the line.
  1062.  
  1063. You would also have to ensure that the dialog only accesses resources
  1064. from the system file. For instance, you couldn't specify a popup
  1065. control using 'CNTL' and 'MENU' resources. You could write code to
  1066. create the popup menu on the fly, or you could write code to create
  1067. the control and menu by saving copies of the resources, and then
  1068. attach the popup to the dialog. It's easier, as suggested in a prior
  1069. post, just to open the extension's resource file before creating the
  1070. dialog. I don't think it's too unreasonable to expect an extension to
  1071. be able to find its own file or some preferences file. If the user
  1072. goes and moves the file, a simple alert (or notification manager
  1073. alert) could issue a gentle admonishment.
  1074. -- 
  1075. Ari Halberstadt    ari@world.std.com     #include <std/disclaimer.h>
  1076. "These beetles were long considered to be very rare because very few
  1077. entomologists look for beetles in the mountains, in winter, at night,
  1078. during snow storms." -- Purves W. K., et al, "Life: The Science of
  1079.  
  1080. ---------------------------
  1081.  
  1082. >From Robert Hess <robert_hess@macweek.ziff.com>
  1083. Subject: Metrowerks News from MacWEEK
  1084. Date: Sat, 9 Apr 1994 02:35:44 GMT
  1085. Organization: MacWEEK
  1086.  
  1087. As a service, here are some snippets from Monday!s MacWEEK. I'll try to do
  1088. this in the future when there's developer-related news but it will be as
  1089. time permits...
  1090.  
  1091. St. Laurent, Quebec -- Metrowerks Inc., the developer community's bold new
  1092. kid on the block, has received a big boost from a formidable ally, IBM
  1093. Corp., and will announce several major additions to its CodeWarrior
  1094. product this week.
  1095.  
  1096. Metrowerks has formed an agreement with IBM which gives Metrowerks access
  1097. to Big Blue's compiler optimization technology for current and future
  1098. PowerPC processors. As a result, Mac developers will have access to the
  1099. best PowerPC code generators available, said Jean Belanger, Metrowerks'
  1100. chairman. "In addition to having the fastest compiler, we'll be able to
  1101. generate the fastest code," he said.
  1102.  
  1103. At Apple's Worldwide Developers Conference next month Metrowerks will
  1104. ship:
  1105.  
  1106. MPW MW CW: Metrowerks will make its native and 680x0 compilers available
  1107. to users of Apple's Macintosh Programmer's Workshop. The combination will
  1108. bring CodeWarrior's speed and MPW's large project- and team-management
  1109. tools together.
  1110.  
  1111. Native-hosted 68K codegen: Metrowerks President and CEO Greg Galanos said,
  1112. "The new compiler is four to five times as fast as our 680x0-based
  1113. compiler and eight times as fast as Think."
  1114.  
  1115. Metrowerks will ship its 680x0 and PowerPC compilers as fat binaries, so
  1116. both can run and generate code for either processor line. The MPW-hosted
  1117. compiler will be included free.
  1118.  
  1119. Since developers feel Apple has not committed to continue supporting the
  1120. language,  Metrowerks will introduce an Object Pascal version of its
  1121. compiler by year-end.
  1122.  
  1123. Metrowerks is now bundling CodeWarrior with NeoLogic Systems' NeoPersist,
  1124. an object-oriented data storage utility for programmers. An encrypted copy
  1125. of NeoAccess, an object-oriented database extension of NeoPersist, is also
  1126. included; users can upgrade for $649.
  1127.  
  1128. Metrowerks plans to open its first U.S. office in Austin, Texas, June 1.
  1129. The Austin office will be the headquarters of the technical support,
  1130. quality assurance and sales divisions.
  1131.  
  1132. [For the full text, see MacWEEK or ZiffNet on CompuServe, eWorld or
  1133. AppleLink]
  1134.  
  1135. ========================================================================
  1136. Robert Hess, WEEKgeek                      robert_hess@macweek.ziff.com
  1137. MacWEEK                                    AppleLink: WNDZSX
  1138. 301 Howard                                 CompuServe: 72511,333
  1139. San Francisco, Calif. 94105                America Online: MacWEEK
  1140. (415) 243-3576 days                        MCI: RHESS
  1141. (415) 243-3651 fax
  1142. (415) 647-5549 nights                      I speak for myself.
  1143. now doesn!t that make you feel better?     And sometimes not even that.
  1144. ========================================================================
  1145.  
  1146. +++++++++++++++++++++++++++
  1147.  
  1148. >From gewekean@studentg.msu.edu (Andrew Geweke)
  1149. Date: Sat,  9 Apr 1994 01:08:09 -0400
  1150. Organization: Michigan State University
  1151.  
  1152. In article <Cnz0JL.5v9@zcias2.ziff.com>, Robert Hess 
  1153. <robert_hess@macweek.ziff.com> writes:
  1154. > As a service, here are some snippets from Monday!s MacWEEK. I'll try to 
  1155. > do this in the future when there's developer-related news but it will 
  1156. > be as time permits... 
  1157.  
  1158. Thank you very much for this! There are obviously lots of people who still 
  1159. can't really get MacWEEK.
  1160.  
  1161. > St. Laurent, Quebec -- Metrowerks Inc., the developer community's bold 
  1162. > new kid on the block, has received a big boost from a formidable ally, 
  1163. > IBM Corp., and will announce several major additions to its CodeWarrior 
  1164. > product this week. 
  1165. > Metrowerks has formed an agreement with IBM which gives Metrowerks 
  1166. > access to Big Blue's compiler optimization technology for current and 
  1167. > future PowerPC processors. As a result, Mac developers will have access 
  1168. > to the best PowerPC code generators available, said Jean Belanger, 
  1169. > Metrowerks' chairman. "In addition to having the fastest compiler, we'
  1170. > ll be able to generate the fastest code," he said. 
  1171.  
  1172. Am I the only one saying Wow? I've heard only huge rave reviews about IBM's 
  1173. compilers, but figured they were only available with the Macintosh on RISC 
  1174. SDK. Great!
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180. +++++++++++++++++++++++++++
  1181.  
  1182. >From sw@network-analysis-ltd.co.uk (Sak Wathanasin)
  1183. Date: Sat, 9 Apr 94 09:34:08 GMT
  1184. Organization: Network Analysis Ltd
  1185.  
  1186.  
  1187. In article <Cnz0JL.5v9@zcias2.ziff.com> (comp.sys.mac.programmer), Robert Hess <robert_hess@macweek.ziff.com> writes:
  1188.  
  1189. > Metrowerks will ship its 680x0 and PowerPC compilers as fat binaries, so
  1190. > both can run and generate code for either processor line. The MPW-hosted
  1191. > compiler will be included free.
  1192.  
  1193. Will this apply retrospectively to those of us who bought DR1 (2,3..)?
  1194. Or do I have to buy the MPW-hosted compiler separately? If the latter, where
  1195. do I get it from?
  1196.  
  1197.  
  1198. Sak Wathanasin
  1199. Network Analysis Limited
  1200. 178 Wainbody Ave South, Coventry CV3 6BX, UK
  1201.  
  1202. Internet: sw@network-analysis-ltd.co.uk 
  1203. uucp:     ...!uknet!nan!sw                       AppleLink: NAN.LTD
  1204. Phone: (+44) 203 419996 Mobile:(+44) 850 587411  Fax: (+44) 203 690690
  1205.  
  1206. +++++++++++++++++++++++++++
  1207.  
  1208. >From zstern@adobe.com (Zalman Stern)
  1209. Date: Sat, 9 Apr 1994 08:41:27 GMT
  1210. Organization: Adobe Systems Incorporated
  1211.  
  1212. Andrew Geweke writes
  1213. > Am I the only one saying Wow? I've heard only huge rave reviews about  
  1214. IBM's 
  1215. > compilers, but figured they were only available with the Macintosh on RISC 
  1216. > SDK. Great!
  1217.  
  1218. IBM's compilers are *not* on the Macintosh on RISC SDK. They are only  
  1219. available for IBM's AIX operating system.
  1220. --
  1221. Zalman Stern           zalman@adobe.com            (415) 962 3824
  1222. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  1223. "Do right, and risk consequences." Motto of Sam Houston (via Molly Ivins)
  1224.  
  1225. +++++++++++++++++++++++++++
  1226.  
  1227. >From johnmce@world.std.com (John McEnerney)
  1228. Date: Sat, 9 Apr 1994 09:03:06 GMT
  1229. Organization: The World Public Access UNIX, Brookline, MA
  1230.  
  1231. > Metrowerks has formed an agreement with IBM which gives Metrowerks 
  1232. > access to Big Blue's compiler optimization technology for current and 
  1233. > future PowerPC processors. As a result, Mac developers will have access 
  1234. > to the best PowerPC code generators available, said Jean Belanger, 
  1235. > Metrowerks' chairman. "In addition to having the fastest compiler, we'
  1236. > ll be able to generate the fastest code," he said. 
  1237.  
  1238. So that the rumours don't fly to far too fast on this one, let me clarify 
  1239. the situation as it will affect you, the users.
  1240.  
  1241. We have an agreement which says that as I develop the next version 
  1242. of our PowerPC code generator, I'm free to ask for advice, experiences, 
  1243. etc. from some of the guys at IBM's Watson Research Center where the 
  1244. POWER architecture was originally designed. It turns out much of my 
  1245. current code generator design is already based on some papers that they 
  1246. wrote at Watson anyway. They are willing to be pretty free with their 
  1247. experience, but I imagine they will also keep some tricks to themselves.
  1248.  
  1249. No source code is involved, at least not to my knowledge. The important 
  1250. point is that Metrowerks is going to invest pretty much 100% of my time 
  1251. developing aggressive global optimization for future versions of our 
  1252. product. How closely we compare with IBMs xlc compilers depends mostly on 
  1253. how good a job I do at that. Our agreement with IBM is an offshoot of a
  1254. relationship we have with some great guys in IBM Microelectronics, who 
  1255. want to see the PowerPC chip succeed and see Apple's broad market 
  1256. penetration with a low-cost desktop PowerPC as crucial to their success. 
  1257.  
  1258. By the way, although IBM seems to have a real stuffed-shirt image, Watson 
  1259. Research seems like a cool place. People there look just like us! Also, 
  1260. it was cool to sit in the office of a guy who wrote probably the first 
  1261. paper on Common Subexpression Elimination in a compiler.
  1262.  
  1263. In my early years at Symantec we always wrestled with the "THINK for fast 
  1264. compiles, MPW for production code" image, one that Apple liked to 
  1265. propagate, until we got serious in v5.0 and wrote a real code 
  1266. generator. I don't want Metrowerks to be pigeonholed like that. For DR3 
  1267. and probably DR4, we will be the "fast" compiler which makes some 
  1268. concessions in the optimization area. (This has not stopped a large 
  1269. number of commercial developers of well-known products from using 
  1270. CodeWarrior to "go native")
  1271.  
  1272. After that, we intend to generate code as good as anybody else's.
  1273.  
  1274. -- John McEnerney, Metrowerks PowerPC Product Architect
  1275.  
  1276. +++++++++++++++++++++++++++
  1277.  
  1278. >From d88-jwa@hemul.nada.kth.se (Jon W‰tte)
  1279. Date: 9 Apr 1994 12:30:13 GMT
  1280. Organization: The Royal Institute of Technology
  1281.  
  1282. In <9404090108.AA09272@geweke.ppp.msu.edu> gewekean@studentg.msu.edu (Andrew Geweke) writes:
  1283.  
  1284. >Am I the only one saying Wow? I've heard only huge rave reviews about IBM's 
  1285. >compilers, but figured they were only available with the Macintosh on RISC 
  1286. >SDK. Great!
  1287.  
  1288. Nope, the Macintosh on RISC SDK uses the Lucid compiler, PPCC.
  1289. To use xlc, you have to have an IBM RS/6000 with the development
  1290. environment, figure on spending $15000 and upwards...
  1291.  
  1292.  
  1293.  
  1294. -- 
  1295.  -- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
  1296.  
  1297.   Clearly, most humans are not rational beings; they are rationalizing beings.
  1298.                      -- Mel Walker
  1299.  
  1300. +++++++++++++++++++++++++++
  1301.  
  1302. >From johnmce@world.std.com (John McEnerney)
  1303. Date: Sun, 10 Apr 1994 04:24:59 GMT
  1304. Organization: The World Public Access UNIX, Brookline, MA
  1305.  
  1306. sw@network-analysis-ltd.co.uk (Sak Wathanasin) writes:
  1307.  
  1308. >> Metrowerks will ship its 680x0 and PowerPC compilers as fat binaries, so
  1309. >> both can run and generate code for either processor line. The MPW-hosted
  1310. >> compiler will be included free.
  1311.  
  1312. >Will this apply retrospectively to those of us who bought DR1 (2,3..)?
  1313. >Or do I have to buy the MPW-hosted compiler separately? If the latter, where
  1314. >do I get it from?
  1315.  
  1316. We'll just tack these onto the CD for DR3, DR4, etc. You'll ghet them 
  1317. automatically (as long as you regstered!)
  1318.  
  1319. -- John McEnerney, Metrowerks PowerPC Product Architect
  1320.  
  1321.  
  1322. +++++++++++++++++++++++++++
  1323.  
  1324. >From sw@network-analysis-ltd.co.uk (Sak Wathanasin)
  1325. Date: Mon, 11 Apr 94 00:24:40 GMT
  1326. Organization: Network Analysis Ltd
  1327.  
  1328.  
  1329. In article <Co109o.E6F@world.std.com> (comp.sys.mac.programmer), johnmce@world.std.com (John McEnerney) writes:
  1330. > >Will this apply retrospectively to those of us who bought DR1 (2,3..)?
  1331. > >Or do I have to buy the MPW-hosted compiler separately? If the latter, where
  1332. > >do I get it from?
  1333. > We'll just tack these onto the CD for DR3, DR4, etc. You'll ghet them 
  1334. > automatically (as long as you regstered!)
  1335.  
  1336. Do we have to wait for DR3 for the MPW-hosted compiler? I thought the press
  1337. release said that it would be released at the WWDC. I'd be happy to buy a
  1338. separate copy of the MPW-hosted compiler if it were available...
  1339.  
  1340.  
  1341. Sak Wathanasin
  1342. Network Analysis Limited
  1343. 178 Wainbody Ave South, Coventry CV3 6BX, UK
  1344.  
  1345. Internet: sw@network-analysis-ltd.co.uk 
  1346. uucp:     ...!uknet!nan!sw                       AppleLink: NAN.LTD
  1347. Phone: (+44) 203 419996 Mobile:(+44) 850 587411  Fax: (+44) 203 690690
  1348.  
  1349. +++++++++++++++++++++++++++
  1350.  
  1351. >From johnmce@world.std.com (John McEnerney)
  1352. Date: Mon, 11 Apr 1994 07:03:19 GMT
  1353. Organization: The World Public Access UNIX, Brookline, MA
  1354.  
  1355. >Do we have to wait for DR3 for the MPW-hosted compiler? I thought the press
  1356. >release said that it would be released at the WWDC. I'd be happy to buy a
  1357. >separate copy of the MPW-hosted compiler if it were available...
  1358.  
  1359. DR3 is the version which we will be shipping at the WWDC! Of course, 
  1360. since we will probably get it in the mail just as we ourselves are 
  1361. leaving for WWDC, you might not get yours until after the WWDC depending 
  1362. on shipping time etc.
  1363.  
  1364. -- John McEnerney, Metrowerks PowerPC Product Architect
  1365.  
  1366. +++++++++++++++++++++++++++
  1367.  
  1368. >From Robert Hess <robert_hess@macweek.ziff.com>
  1369. Date: Mon, 11 Apr 1994 16:44:35 GMT
  1370. Organization: MacWEEK
  1371.  
  1372. In article <9404090108.AA09272@geweke.ppp.msu.edu> Andrew Geweke, gewekean@studentg.msu.edu
  1373. writes:
  1374. >Thank you very much for this! There are obviously lots of people who still 
  1375. >can't really get MacWEEK.
  1376.  
  1377. Well, keep in mind:
  1378.  
  1379. a) My employer won't let me post the full article;
  1380. b) This is going be as time permits.
  1381.  
  1382. So you're still better off getting the full scoop via MacWEEK or online.
  1383.  
  1384. ========================================================================
  1385. Robert Hess, WEEKgeek                      robert_hess@macweek.ziff.com
  1386. MacWEEK                                    AppleLink: WNDZSX
  1387. 301 Howard                                 CompuServe: 72511,333
  1388. San Francisco, Calif. 94105                America Online: MacWEEK
  1389. (415) 243-3576 days                        MCI: RHESS
  1390. (415) 243-3651 fax
  1391. (415) 647-5549 nights                      I speak for myself.
  1392. now doesn!t that make you feel better?     And sometimes not even that.
  1393. ========================================================================
  1394.  
  1395. +++++++++++++++++++++++++++
  1396.  
  1397. >From peter.lewis@info.curtin.edu.au (Peter N Lewis)
  1398. Date: Sun, 10 Apr 1994 12:27:59 +0800
  1399. Organization: NCRPDA, Curtin University
  1400.  
  1401. >Since developers feel Apple has not committed to continue supporting the
  1402. >language,  Metrowerks will introduce an Object Pascal version of its
  1403. >compiler by year-end.
  1404.  
  1405. And there was much rejoicing!  Now, what was the upgrade strategy for
  1406. this?  If the upgrade from Pascal to Object Pascel is sufficiently cheap,
  1407. then I'd love to buy a copy now and help get the bugs out!
  1408.    Peter.
  1409. _______________________________________________________________________
  1410. Peter N Lewis <peter.lewis@info.curtin.edu.au>       Ph: +61 9 368 2055
  1411.  
  1412. +++++++++++++++++++++++++++
  1413.  
  1414. >From gurgle@netcom.com (Pete Gontier)
  1415. Date: Sun, 17 Apr 1994 04:22:07 GMT
  1416. Organization: cellular
  1417.  
  1418. peter.lewis@info.curtin.edu.au (Peter N Lewis) writes:
  1419.  
  1420. >>Since developers feel Apple has not committed to continue supporting the
  1421. >>language,  Metrowerks will introduce an Object Pascal version of its
  1422. >>compiler by year-end.
  1423.  
  1424. >And there was much rejoicing!  Now, what was the upgrade strategy for
  1425. >this?  If the upgrade from Pascal to Object Pascel is sufficiently cheap,
  1426. >then I'd love to buy a copy now and help get the bugs out!
  1427.  
  1428. Since the license for DR2 includes updates through DR5 or so, and since
  1429. DR5 isn't supposed to ship this year, and since Object Pascal *is*
  1430. supposed to ship this year, my guess is that buying CodeWarrior now is
  1431. sufficient. Metrowerks may not have thought along this precise path, so
  1432. when you call them to confirm, mention it.
  1433. -- 
  1434.  Pete Gontier, CTO, Integer Poet Software; gurgle@netcom.com
  1435.  
  1436. +++++++++++++++++++++++++++
  1437.  
  1438. >From mwron@aol.com (MW Ron)
  1439. Date: 17 Apr 1994 16:24:02 -0400
  1440. Organization: America Online, Inc. (1-800-827-6364)
  1441.  
  1442. In article <gurgleCoDysv.8w6@netcom.com>, gurgle@netcom.com (Pete Gontier)
  1443. writes:
  1444. >> Since the license for DR2 includes updates through DR5 or so, and since
  1445. DR5 isn't supposed to ship this year, and since Object Pascal *is*
  1446. supposed to ship this year, my guess is that buying CodeWarrior now is
  1447. sufficient. 
  1448.  
  1449. Right, Every CD will include the latest compiler versions available.  With more
  1450. source codes and 3rd party demos and tools.  If you purchase the DR\2
  1451. pre-release version you will receive DR\3. DR\4, DR\5 as well, these CD's will
  1452. come out every 4 months.
  1453.  
  1454. The only upgrading necessary could be from a Bronze to a Gold if you needed to
  1455. write for a PowerPC later on.  
  1456.  
  1457. Ron Liechty
  1458. mwron@aol.com
  1459. Metrowerks Inc.
  1460.  
  1461. ---------------------------
  1462.  
  1463. >From greer@utdallas.edu (Dale M. Greer)
  1464. Subject: WaitNextEvent Emulated on PoMac!?
  1465. Date: 11 Apr 1994 15:50:35 GMT
  1466. Organization: The University of Texas at Dallas
  1467.  
  1468. Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1469. in emulation mode on the Power Macintosh.  This was in response to 
  1470. a programmer frustrated by jerky animation on the Power Mac.  It was
  1471. recommended that he put code to call WaitNextEvent after some number of
  1472. passes through the event loop, say every tenth pass.
  1473.  
  1474. It seems like WaitNextEvent would be one of the most frequently used 
  1475. routines by most applications, so why didn't Apple make it native?  Will 
  1476. it be native for System 7.5?
  1477.  
  1478. --
  1479.  
  1480. Dale Greer, greer@utdallas.edu
  1481.  
  1482.  
  1483.  
  1484. +++++++++++++++++++++++++++
  1485.  
  1486. >From fixer@faxcsl.dcrt.nih.gov (Chris Gonna' Find Ray Charles Tate)
  1487. Date: Mon, 11 Apr 1994 16:34:10 GMT
  1488. Organization: DCRT, NIH, Bethesda, MD
  1489.  
  1490. In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M. Greer) writes:
  1491. >
  1492. >Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1493. >in emulation mode on the Power Macintosh.  This was in response to 
  1494. >a programmer frustrated by jerky animation on the Power Mac.  It was
  1495. >recommended that he put code to call WaitNextEvent after some number of
  1496. >passes through the event loop, say every tenth pass.
  1497. >
  1498. >It seems like WaitNextEvent would be one of the most frequently used 
  1499. >routines by most applications, so why didn't Apple make it native?  Will 
  1500. >it be native for System 7.5?
  1501.  
  1502. I expect it's *because* it's one of the most-called routines.  If it were
  1503. native, then *every time* an emulated application called it would entail
  1504. at least two mode switches (into native to run the trap, then back out
  1505. again to run the application).  Mode switching is expensive.
  1506.  
  1507. Now, it *could* be that the trap is run native when you're running in
  1508. native mode, but emulated when you're running under the emulator; it seems
  1509. to me this would be optimal.  Does anyone know whether this is indeed the
  1510. case under the current PowerMac system software?
  1511.  
  1512. - -------------------------------------------------------------------
  1513. Christopher Tate             |   "Blue ice cubes?  How degenerate!"
  1514. MSD, Inc.                    |
  1515. fixer@faxcsl.dcrt.nih.gov    |    < anybody recognize the source? >
  1516.  
  1517. +++++++++++++++++++++++++++
  1518.  
  1519. >From Erik Schwiebert <evs1@cornell.edu>
  1520. Date: 11 Apr 1994 18:12:43 GMT
  1521. Organization: Cornell University
  1522.  
  1523. In article <1994Apr11.163410.6724@alw.nih.gov> Chris Gonna' Find Ray
  1524. Charles Tate, fixer@faxcsl.dcrt.nih.gov writes:
  1525. >In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M.
  1526. Greer) writes:
  1527. >>
  1528. >>Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1529. >>in emulation mode on the Power Macintosh.  This was in response to 
  1530. >>a programmer frustrated by jerky animation on the Power Mac.  It was
  1531. >>recommended that he put code to call WaitNextEvent after some number of
  1532. >>passes through the event loop, say every tenth pass.
  1533. >>
  1534. >>It seems like WaitNextEvent would be one of the most frequently used 
  1535. >>routines by most applications, so why didn't Apple make it native? 
  1536. Will 
  1537. >>it be native for System 7.5?
  1538. >
  1539. >I expect it's *because* it's one of the most-called routines.  If it were
  1540. >native, then *every time* an emulated application called it would entail
  1541. >at least two mode switches (into native to run the trap, then back out
  1542. >again to run the application).  Mode switching is expensive.
  1543. >
  1544. >Now, it *could* be that the trap is run native when you're running in
  1545. >native mode, but emulated when you're running under the emulator; it
  1546. seems
  1547. >to me this would be optimal.  Does anyone know whether this is indeed the
  1548. >case under the current PowerMac system software?
  1549.  
  1550. well, according to the example in New Inside Mac: PowerPC Software (or
  1551. whatever the title is), Apple gives an example that shows exactly what
  1552. Dale Greer said.  ie, the code only calls WNE every once in a while.  I
  1553. dont have the book, but it looked something like this:
  1554.  
  1555. procedure mainloop;
  1556.  var theEvent:eventRecord;
  1557. begin
  1558.   if (tickCount - gTimeOfLastCall) > gTimeToWait then begin
  1559.     gotEvent := waitNextEvent(blah, blah, blah ...)
  1560.     gTimeOfLastCall := tickCount;
  1561.   else
  1562.     gotEvent := false;
  1563.   if gotEvent then
  1564.     case  whatever of whatever
  1565.   etc...
  1566. end; 
  1567.  
  1568. anyways, you get the idea...  where gTimeToWait is 10 ticks or something
  1569. like that (getCaretTime maybe?) 
  1570.  
  1571. - -----------------------------------------------------------------
  1572.  "So live that you can |------------------| "Life is a tragedy for
  1573.   look any man in the  | evs1@cornell.edu |  those who feel, and a
  1574.   eye and tell him     |------------------|  comedy for those who
  1575.   go to hell."         |     Erik V.      |  think."
  1576.   -- Anonymous         |   Schwiebert     |  -- Jean De La Bruyere
  1577. - -----------------------------------------------------------------
  1578.  
  1579. +++++++++++++++++++++++++++
  1580.  
  1581. >From jwbaxter@olympus.net (John W. Baxter)
  1582. Date: Mon, 11 Apr 1994 11:01:28 -0700
  1583. Organization: Internet for the Olympic Peninsula
  1584.  
  1585. In article <1994Apr11.163410.6724@alw.nih.gov>, fixer@faxcsl.dcrt.nih.gov
  1586. (Chris Gonna' Find Ray Charles Tate) wrote:
  1587.  
  1588. > In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M. Greer) writes:
  1589. > >
  1590. > >Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1591. > >in emulation mode on the Power Macintosh.  This was in response to 
  1592. > >a programmer frustrated by jerky animation on the Power Mac.  It was
  1593. > >recommended that he put code to call WaitNextEvent after some number of
  1594. > >passes through the event loop, say every tenth pass.
  1595. > >
  1596. > I expect it's *because* it's one of the most-called routines.  If it were
  1597. > native, then *every time* an emulated application called it would entail
  1598. > at least two mode switches (into native to run the trap, then back out
  1599. > again to run the application).  Mode switching is expensive.
  1600. > Now, it *could* be that the trap is run native when you're running in
  1601. > native mode, but emulated when you're running under the emulator; it seems
  1602. > to me this would be optimal.  Does anyone know whether this is indeed the
  1603. > case under the current PowerMac system software?
  1604.  
  1605. It is possible to create "fat" traps...run 68K or PPC.  It was done for
  1606. several traps which **are unlikely to be patched**.  It's not clear that
  1607. existing apps which patch traps can deal with the fat ones.  Of course, no
  1608. one ever patches WaitNextEvent, and everyone who does so does it "right",
  1609. and will instantly retrofit "fat" patches.
  1610.  
  1611. -- 
  1612. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  1613.    jwbaxter@pt.olympus.net
  1614.  
  1615. +++++++++++++++++++++++++++
  1616.  
  1617. >From sbarta@magnus.acs.ohio-state.edu (Scott Barta)
  1618. Date: 11 Apr 1994 15:33:23 -0400
  1619. Organization: The Ohio State University
  1620.  
  1621. > well, according to the example in New Inside Mac: PowerPC Software (or
  1622. > whatever the title is), Apple gives an example that shows exactly what
  1623. > Dale Greer said.  ie, the code only calls WNE every once in a while.  I
  1624. > dont have the book, but it looked something like this:
  1625.     [code deleted] 
  1626. > anyways, you get the idea...  where gTimeToWait is 10 ticks or something
  1627. > like that (getCaretTime maybe?) 
  1628.  
  1629.  
  1630. There's one big problem with all of this.  While your application is
  1631. burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
  1632. to other applications.  Very unfriendly.  I'm surprised that Apple is
  1633. advocating this, unless they're thinking ahead to some happy day when
  1634. applications will be able to preempt each other without WNE.  I would think
  1635. that you'd just want to call WNE as often as possible and grit your teeth
  1636. through the mode switches until the needed Toolbox calls go
  1637. native...shucks, your program may not be fully _debugged_ by then.  :-)
  1638.  
  1639.  
  1640. -- 
  1641. --Scott Barta
  1642. --sbarta@magnus.acs.ohio-state.edu
  1643.  
  1644. +++++++++++++++++++++++++++
  1645.  
  1646. >From b-clark@nwu.edu (Brian Clark)
  1647. Date: Mon, 11 Apr 1994 16:33:16 -0500
  1648. Organization: Northwestern University
  1649.  
  1650. In article <199404111933.PAA15286@bottom.magnus.acs.ohio-state.edu>,
  1651. sbarta@magnus.acs.ohio-state.edu (Scott Barta) wrote:
  1652.  
  1653. > There's one big problem with all of this.  While your application is
  1654. > burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
  1655. > to other applications.  Very unfriendly.  I'm surprised that Apple is
  1656. > advocating this, unless they're thinking ahead to some happy day when
  1657. > applications will be able to preempt each other without WNE.  I would think
  1658. > that you'd just want to call WNE as often as possible and grit your teeth
  1659. > through the mode switches until the needed Toolbox calls go
  1660. > native...shucks, your program may not be fully _debugged_ by then.  :-)
  1661.  
  1662.  
  1663. A recent develop had a question on this, I believe. Someone had a app that
  1664. did a calculation, called WNE, did another calc, etc. When translated to
  1665. native code, more time was being after yielding to other apps than to
  1666. perform calculations. The suggestion was to call WNE less often, based on
  1667. some fixed timing schedule, and not on how fast or slow a particular series
  1668. of calculations took. This seems to be perfectly defensible.
  1669.  
  1670. +++++++++++++++++++++++++++
  1671.  
  1672. >From ivanski@world.std.com (Ivan M CaveroBelaunde)
  1673. Date: Mon, 11 Apr 1994 21:53:59 GMT
  1674. Organization: The World Public Access UNIX, Brookline, MA
  1675.  
  1676. Erik Schwiebert <evs1@cornell.edu> writes:
  1677. >In article <1994Apr11.163410.6724@alw.nih.gov> Chris Gonna' Find Ray
  1678. >Charles Tate, fixer@faxcsl.dcrt.nih.gov writes:
  1679. >>In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M.
  1680. >Greer) writes:
  1681. >>>Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1682. >>>in emulation mode on the Power Macintosh.  This was in response to 
  1683. >>>a programmer frustrated by jerky animation on the Power Mac.  It was
  1684. >>>recommended that he put code to call WaitNextEvent after some number of
  1685. >>>passes through the event loop, say every tenth pass.
  1686. >well, according to the example in New Inside Mac: PowerPC Software (or
  1687. >whatever the title is), Apple gives an example that shows exactly what
  1688. >Dale Greer said.  ie, the code only calls WNE every once in a while.  I
  1689. >dont have the book, but it looked something like this:
  1690. >procedure mainloop;
  1691. > var theEvent:eventRecord;
  1692. >begin
  1693. >  if (tickCount - gTimeOfLastCall) > gTimeToWait then begin
  1694. >    gotEvent := waitNextEvent(blah, blah, blah ...)
  1695. >    gTimeOfLastCall := tickCount;
  1696. >  else
  1697. >    gotEvent := false;
  1698. >  if gotEvent then
  1699. >    case  whatever of whatever
  1700. >  etc...
  1701. >end; 
  1702.  
  1703. It's kind of nasty (since it hogs the machine while you do nothing, because
  1704. gotEvent is hard-set to false if WNE is not called). A big problem,
  1705. I see, is that GetOSEvent and OSEventAvail are emulated - a good
  1706. alternative would have been to use those to process events while in
  1707. the foreground (this makes your app hog the machine while it is in front,
  1708. but it's processing user interactions, not sitting in an idle loop like
  1709. the code above; of course, if you're not in the foreground you should
  1710. relinqueish the CPU ASAP).
  1711.  
  1712. I could easily see the rationale for WNE/GNE being emulated that the
  1713. likelihood of a Mixed Mode Switch when doing the process swap is
  1714. exceedingly high anyway (I think the device manager is still emulated,
  1715. and WNE calls SystemTask). But hogging the machine AND not responding
  1716. to user events strikes me as unnecessarily evil.
  1717.  
  1718. I do hope the event handling (OS Event Mgr, Toolbox, Device Mgr) goes fat
  1719. (not native, too many 68K emulated apps would suffer performance problems)
  1720. in the next release - would go a long way towards easing that problem.
  1721.  
  1722. -Ivan
  1723. - -
  1724. Ivan Cavero Belaunde (ivanski@world.std.com)
  1725. Avid VideoShop Project Lead
  1726. Avid Technology, Inc.
  1727.  
  1728. +++++++++++++++++++++++++++
  1729.  
  1730. >From greer@utdallas.edu (Dale M. Greer)
  1731. Date: 11 Apr 1994 22:24:03 GMT
  1732. Organization: The University of Texas at Dallas
  1733.  
  1734. Brian Clark (b-clark@nwu.edu) wrote:
  1735. > In article <199404111933.PAA15286@bottom.magnus.acs.ohio-state.edu>,
  1736. > sbarta@magnus.acs.ohio-state.edu (Scott Barta) wrote:
  1737.  
  1738. > > There's one big problem with all of this.  While your application is
  1739. > > burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
  1740. > > to other applications.  Very unfriendly.  I'm surprised that Apple is
  1741.  
  1742. > A recent develop had a question on this, I believe. Someone had a app that
  1743. > did a calculation, called WNE, did another calc, etc. When translated to
  1744. > native code, more time was being after yielding to other apps than to
  1745. > perform calculations. The suggestion was to call WNE less often, based on
  1746. > some fixed timing schedule, and not on how fast or slow a particular series
  1747. > of calculations took. This seems to be perfectly defensible.
  1748.  
  1749. Wouldn't it be nice if Apple had made a new GetMyPriority function, which
  1750. would get a value from a new resource which would tell your code how many
  1751. ticks to wait before calling WaitNextEvent.  Of course, the success of this
  1752. would depend on everyone using it, but if they did, then the user could set
  1753. priorities for each application as easily as setting the memory 
  1754. requirements.  Theoretically. ;)
  1755.  
  1756. As an alternative to having the programmer provide the waiting logic,
  1757. why couldn't Apple have made a little piece of code to call GetMyPriority,
  1758. or something similar just before calling the emulated WaitNextEvent?  This
  1759. little piece of code could just return until its timer timed out, when
  1760. it would then act like a regular call to WaitNextEvent.
  1761.  
  1762. --
  1763.  
  1764. Dale Greer, greer@utdallas.edu
  1765.  
  1766.  
  1767.  
  1768. +++++++++++++++++++++++++++
  1769.  
  1770. >From lsr@taligent.com (Larry Rosenstein)
  1771. Date: Mon, 11 Apr 1994 22:46:20 GMT
  1772. Organization: Taligent, Inc.
  1773.  
  1774. In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M.
  1775. Greer) wrote:
  1776.  
  1777. > Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1778. > in emulation mode on the Power Macintosh.  This was in response to 
  1779.  
  1780. A good application will call WaitNextEvent with the appropriate sleep
  1781. value, which means it doesn't get called as often as you'd think.
  1782.  
  1783. > recommended that he put code to call WaitNextEvent after some number of
  1784. > passes through the event loop, say every tenth pass.
  1785.  
  1786. That might be appropriate for animation where you want to maintain control
  1787. as much as possible.  I don't think you'd want to do this based on number
  1788. of passes, but rather based on elapsed time as someone suggested.
  1789.  
  1790. -- 
  1791. Larry Rosenstein
  1792. Taligent, Inc.
  1793.  
  1794. lsr@taligent.com
  1795.  
  1796. +++++++++++++++++++++++++++
  1797.  
  1798. >From leblonk@netcom.com (Marcel Blonk)
  1799. Date: Tue, 12 Apr 1994 00:12:32 GMT
  1800. Organization: NETCOM On-line Communication Services (408 241-9760 guest)
  1801.  
  1802. Dale M. Greer (greer@utdallas.edu) wrote:
  1803. : It seems like WaitNextEvent would be one of the most frequently used 
  1804. : routines by most applications, so why didn't Apple make it native?  Will 
  1805. : it be native for System 7.5?
  1806.  
  1807. Most time spent in WNE, as seen from an app, is actually spent in the 
  1808. other (background) apps that call WNE. Jerky animation and such, is caused 
  1809. by other apps taking up too much time in the background (read: calling 
  1810. WNE only every once in a while). The actual time spent in WNE itself is 
  1811. negligible, therefore I can understand that apple doesn't make it a 
  1812. priority to natify (from the verb 'to native') WNE (compare eg. the 
  1813. average app spends 70% of it's time in DrawText)
  1814.  
  1815. mb
  1816.  
  1817.  
  1818. +++++++++++++++++++++++++++
  1819.  
  1820. >From steeeve@aol.com (Steeeve)
  1821. Date: 12 Apr 1994 03:12:27 -0400
  1822. Organization: America Online, Inc. (1-800-827-6364)
  1823.  
  1824. In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M. Greer)
  1825. writes:
  1826. >>>>
  1827. Someone on the CodeWarrior mailing list said that WaitNextEvent runs
  1828. in emulation mode on the Power Macintosh. 
  1829. <<<<
  1830.  
  1831. I just finished up some code from which I expected to see a big speed gain on
  1832. the Power Mac, but it turned out to be slower than on a Quadra 800. I was
  1833. essentially doing this:
  1834.  
  1835. do some calculations;
  1836. fall through event loop;
  1837.  
  1838. I realized that in this case the only reasonable event was a mouse click, so I
  1839. changed it to
  1840.  
  1841. while( ! Button() )
  1842.    do some calculations;
  1843.  
  1844. flush any other events;  //so that the click is processed
  1845. fall through event loop;
  1846.  
  1847. Of course I probably should have done it like this in the first place, but on a
  1848. 6100 it went from 190,000 calculations per hour to 1,475,000.
  1849.  
  1850.  
  1851. -Steve
  1852.  
  1853.  
  1854. +++++++++++++++++++++++++++
  1855.  
  1856. >From woody@alumni.caltech.edu (William Edward Woody)
  1857. Date: 12 Apr 1994 07:44:53 GMT
  1858. Organization: California Institute of Technology, Alumni Association
  1859.  
  1860. In article <199404111933.PAA15286@bottom.magnus.acs.ohio-state.edu>,
  1861. Scott Barta <sbarta@magnus.acs.ohio-state.edu> wrote:
  1862. >> well, according to the example in New Inside Mac: PowerPC Software (or
  1863. >> whatever the title is), Apple gives an example that shows exactly what
  1864. >> Dale Greer said.  ie, the code only calls WNE every once in a while.  I
  1865. >> dont have the book, but it looked something like this:
  1866. >> 
  1867. >    [code deleted] 
  1868. >> anyways, you get the idea...  where gTimeToWait is 10 ticks or something
  1869. >> like that (getCaretTime maybe?) 
  1870. >
  1871. >
  1872. >There's one big problem with all of this.  While your application is
  1873. >burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
  1874. >to other applications.  Very unfriendly.  I'm surprised that Apple is
  1875. >advocating this, unless they're thinking ahead to some happy day when
  1876. >applications will be able to preempt each other without WNE.  I would think
  1877. >that you'd just want to call WNE as often as possible and grit your teeth
  1878. >through the mode switches until the needed Toolbox calls go
  1879. >native...shucks, your program may not be fully _debugged_ by then.  :-)
  1880.  
  1881. Actually it turns out to be an extremely reasonable thing to do if you
  1882. want your application to get as much of the CPU as possible while yielding
  1883. in a way which feels very responsive to foreground applications.
  1884.  
  1885. If you make gTimeToWait 15 ticks, then when the user starts typing in the
  1886. foreground application he will be forced to wait no longer than 1/4
  1887. second before his application responds; for most applications users
  1888. won't feel a significant delay in the responsiveness of the application.
  1889. And since WNE won't return to the CPU-intensive application until there
  1890. is a delay in events arriving at the foreground application (such as when
  1891. the user pauses a second to think while typing in Microsoft Word),
  1892. the foreground application will get all the CPU needed to respond to the
  1893. user's typing or drawing.
  1894.  
  1895. I've used this technique in quite a few applications and have been
  1896. quite pleased at the amount of CPU my background CPU-intensive application
  1897. gets, while still getting reasonable responsiveness in the foreground
  1898. application.
  1899.  
  1900.                         - Bill
  1901.  
  1902. (Who isn't quite sure he understands why pre-emptive multi-tasking
  1903. is so hot, given how unresponsive a Sun workstation feels compared
  1904. to his less powerful Macintosh.)
  1905. -- 
  1906.  "A secret face--a touch of grace        William Edward Woody
  1907.   A man must learn to give a little space    woody@alumni.cco.caltech.edu
  1908.   A peaceful state--a submissive trait
  1909.   A man must learn to gently dominate" -- Rush, "Animate"
  1910.  
  1911. +++++++++++++++++++++++++++
  1912.  
  1913. >From d88-jwa@mumrik.nada.kth.se (Jon W‰tte)
  1914. Date: 12 Apr 1994 08:44:59 GMT
  1915. Organization: The Royal Institute of Technology
  1916.  
  1917. In <2obrkb$2i8@news.utdallas.edu> greer@utdallas.edu (Dale M. Greer) writes:
  1918.  
  1919. >It seems like WaitNextEvent would be one of the most frequently used 
  1920. >routines by most applications, so why didn't Apple make it native?  Will 
  1921. >it be native for System 7.5?
  1922.  
  1923. Wrong. WaitNextEvent isn't that important; when applications call it,
  1924. they expect some time to pass (since other apps can get switched in
  1925. during the call)
  1926.  
  1927. The real power suckers were DrawText() and FillRect() (==EraseRect())
  1928. plus a couple of others (the memory manager in some cases :-)
  1929. -- 
  1930.  -- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
  1931.  
  1932.    This article printed on 100% recycled electrons.
  1933.  
  1934. +++++++++++++++++++++++++++
  1935.  
  1936. >From neeri@iis.ee.ethz.ch (Matthias Neeracher)
  1937. Date: 14 Apr 94 11:05:29
  1938. Organization: Integrated Systems Laboratory, ETH, Zurich
  1939.  
  1940. In article <leblonkCo4Dww.JKp@netcom.com>, leblonk@netcom.com (Marcel Blonk) writes:
  1941. > Dale M. Greer (greer@utdallas.edu) wrote:
  1942. > : It seems like WaitNextEvent would be one of the most frequently used 
  1943. > : routines by most applications, so why didn't Apple make it native?  Will 
  1944. > : it be native for System 7.5?
  1945.  
  1946. > Most time spent in WNE, as seen from an app, is actually spent in the 
  1947. > other (background) apps that call WNE. 
  1948.  
  1949. This is true to a certain degree. However, excessive calling of WNE
  1950. *while the application still has something to do* may slow down your
  1951. code considerably.
  1952.  
  1953. Matthias
  1954.  
  1955. - ---
  1956. Matthias Neeracher                                      neeri@iis.ee.ethz.ch
  1957.   "Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes
  1958.    and weighs 30 tons, computers in the future may have only 1,000 vacuum
  1959.    tubes and weigh only 1 1/2 tons."         ---Popular Mechanics, March 1949
  1960.  
  1961.  
  1962.  
  1963. +++++++++++++++++++++++++++
  1964.  
  1965. >From leblonk@netcom.com (Marcel Blonk)
  1966. Date: Thu, 14 Apr 1994 19:05:26 GMT
  1967. Organization: NETCOM On-line Communication Services (408 241-9760 guest)
  1968.  
  1969. Matthias Neeracher (neeri@iis.ee.ethz.ch) wrote:
  1970. : In article <leblonkCo4Dww.JKp@netcom.com>, leblonk@netcom.com (Marcel Blonk) writes:
  1971. : > Dale M. Greer (greer@utdallas.edu) wrote:
  1972. : > : It seems like WaitNextEvent would be one of the most frequently used 
  1973. : > : routines by most applications, so why didn't Apple make it native?  Will 
  1974. : > : it be native for System 7.5?
  1975.  
  1976. : > Most time spent in WNE, as seen from an app, is actually spent in the 
  1977. : > other (background) apps that call WNE. 
  1978.  
  1979. : This is true to a certain degree. However, excessive calling of WNE
  1980. : *while the application still has something to do* may slow down your
  1981. : code considerably.
  1982.  
  1983. True, but the issue here is, that to make the WNE code native, wouldn't 
  1984. do much to improve performance. Not calling WNE too much has always been 
  1985. an issue on the mac, way before the PowerMac.
  1986.  
  1987. mb
  1988.  
  1989. +++++++++++++++++++++++++++
  1990.  
  1991. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  1992. Date: Mon, 18 Apr 1994 20:07:43 GMT
  1993. Organization: Apple Computer
  1994.  
  1995. On any reasonably fast Mac it's a bad idea to call WNE too often; not that
  1996. the implentation itself is slow, but there are limitations in the OS on how
  1997. fast process switches can happen, so when you call WNE you should expect to
  1998. be gone for at least a tick or two if there are any other non-sleeping
  1999. processes on that machine.
  2000.  
  2001. Scott Barta, sbarta@magnus.acs.ohio-state.edu writes:
  2002. > There's one big problem with all of this.  While your application is
  2003. > burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
  2004. > to other applications.  Very unfriendly.  I'm surprised that Apple is
  2005.  
  2006. Well they're not advocating calling it only once a minute! It's probably best
  2007. to call WNE about once a second max while you're in the foreground. If you're
  2008. in the background you may want to call it four times a second or so. If you
  2009. call WNE too often you're also giving up lots of cycles to a loop inside the
  2010. Process Manager that waits for TickCount to advance.
  2011.  
  2012. --Jens Alfke
  2013.   jens_alfke@powertalk              Rebel girl, rebel girl,
  2014.             .apple.com              Rebel girl you are the queen of my world
  2015.  
  2016. +++++++++++++++++++++++++++
  2017.  
  2018. >From Dave Falkenburg <falken@apple.com>
  2019. Date: Mon, 18 Apr 1994 20:54:51 GMT
  2020. Organization: Apple Computer, Inc.
  2021.  
  2022. In article <1994Apr18.200743.26643@gallant.apple.com> Jens Alfke,
  2023. jens_alfke@powertalk.apple.com writes:
  2024. >Well they're not advocating calling it only once a minute! It's probably
  2025. best
  2026. >to call WNE about once a second max while you're in the foreground. If
  2027. you're
  2028. >in the background you may want to call it four times a second or so. If
  2029. you
  2030.  
  2031. You should ALWAYS dynamically calculate the sleep time!
  2032.  
  2033. When in the background, err on the side of calling WNE more than you'd
  2034. like with LARGE sleep values.
  2035.  
  2036. When running in the foreground, you should periodically call through, but
  2037. alter the frequency of your calling through if you are doing something
  2038. very compute-bound.
  2039.  
  2040. If you AREN'T compute bound, always call through... In most cases, the
  2041. worst thing this will do is pollute your instruction cache with other
  2042. people's code.
  2043.  
  2044. Of course, if you are doing something USER-bound (like a word processor)
  2045. you probably always want to call through anyway.
  2046.  
  2047.  
  2048. >call WNE too often you're also giving up lots of cycles to a loop inside
  2049. the
  2050. >Process Manager that waits for TickCount to advance.
  2051.  
  2052. Actually, I usually don't disagree with Jens, but this ONLY happens when
  2053. NO EVENTS are flying around and EVERY process is asleep...  In the
  2054. future, when we have a "real" operating system, we'll block instead...
  2055.  
  2056. -Dave Falkenburg
  2057. -Apple Computer, Inc.
  2058.  
  2059. ---------------------------
  2060.  
  2061. >From Jeff DuMonthier <jeff.dumonthier@gsfc.nasa.gov>
  2062. Subject: X2Fix code generation bug still in SC++ 7.0
  2063. Date: 6 Apr 1994 14:54:33 GMT
  2064. Organization: NASA GSFC
  2065.  
  2066. I recently posted sample code which demonstrated a code generation bug
  2067. in SC++ 6.0.1.  I have updated to 7.0 and the bug is still there, with
  2068. maybe a slight difference.  The following code demonstrates two
  2069. variations:
  2070.  
  2071. #include <fixmath.h>
  2072.  
  2073. Fixed FixIt1(extended x)
  2074. {    
  2075.     Fixed f = X2Fix(x);           //< This works
  2076.     return f;
  2077. }
  2078.  
  2079. Fixed FixIt2(extended *x)
  2080. {    
  2081.     Fixed f = X2Fix(*x);          //< This just fails.
  2082.     return f;
  2083. }
  2084.  
  2085. void main(void)
  2086. {
  2087.     extended x = 1.0;
  2088.     extended *xp = &x;
  2089.     
  2090.     Fixed f1 = FixIt1(x);
  2091.     Fixed f2 = FixIt2(&x);
  2092.     Fixed f3 = X2Fix(x);
  2093.     Fixed f4 = X2Fix(*xp);        //< Illegal instruction.
  2094. }
  2095.  
  2096. I started with a C++ project and used the factory default compilation
  2097. options for the project and for rebuilding the libraries.  The
  2098. following behavior is what I observed tracing through the program with
  2099. the source debugger:
  2100.  
  2101. FixIt1 works correctly and f1 will be assigned 0x00010000.  FixIt2 does
  2102. not work and f2 will be assigned 0 (local variable f in FixIt2 is also
  2103. assigned 0).  The assignment to f3 using X2Fix(x) works but
  2104. f4 = X2Fix(*xp) results in an illegal instruction error message (run
  2105. time, not a syntax error).
  2106.  
  2107. Here is the disassembled code:
  2108.  
  2109. FixIt1(long double):
  2110. 00000000: 4E56 0000          LINK      A6,#$0000
  2111. 00000004: 2F03               MOVE.L    D3,-(A7)
  2112. 00000006: 594F               SUBQ.W    #$4,A7
  2113. 00000008: 486E 0008          PEA       $0008(A6)
  2114. 0000000C: A844               _X2Fix
  2115. 0000000E: 201F               MOVE.L    (A7)+,D0
  2116. 00000010: 2600               MOVE.L    D0,D3
  2117. 00000012: 261F               MOVE.L    (A7)+,D3
  2118. 00000014: 4E5E               UNLK      A6
  2119. 00000016: 205F               MOVEA.L   (A7)+,A0
  2120. 00000018: 4FEF 000A          LEA       $000A(A7),A7
  2121. 0000001C: 4ED0               JMP       (A0)
  2122. 0000001E
  2123.  
  2124. FixIt2(long double *):
  2125. 00000000: 4E56 0000          LINK      A6,#$0000
  2126. 00000004: 2F03               MOVE.L    D3,-(A7)
  2127. 00000006: 594F               SUBQ.W    #$4,A7
  2128. 00000008: 486E 0008          PEA       $0008(A6)
  2129. 0000000C: A844               _X2Fix
  2130. 0000000E: 201F               MOVE.L    (A7)+,D0
  2131. 00000010: 2600               MOVE.L    D0,D3
  2132. 00000012: 261F               MOVE.L    (A7)+,D3
  2133. 00000014: 4E5E               UNLK      A6
  2134. 00000016: 205F               MOVEA.L   (A7)+,A0
  2135. 00000018: 584F               ADDQ.W    #$4,A7
  2136. 0000001A: 4ED0               JMP       (A0)
  2137. 0000001C
  2138.  
  2139. main:
  2140. 00000000: 4E56 FFF4          LINK      A6,#$FFF4
  2141. 00000004: 48E7 1E30          MOVEM.L   D3-D6/A2/A3,-(A7)
  2142. 00000008: 2D7C 3FFF 8000     MOVE.L    #$3FFF8000,$FFF4(A6)
  2143.           FFF4           
  2144. 00000010: 42AE FFF8          CLR.L     $FFF8(A6)
  2145. 00000014: 426E FFFC          CLR.W     $FFFC(A6)
  2146. 00000018: 45EE FFF4          LEA       $FFF4(A6),A2
  2147. 0000001C: 264A               MOVEA.L   A2,A3
  2148. 0000001E: 41EE FFF4          LEA       $FFF4(A6),A0
  2149. 00000022: 3F28 0008          MOVE.W    $0008(A0),-(A7)
  2150. 00000026: 2F28 0004          MOVE.L    $0004(A0),-(A7)
  2151. 0000002A: 2F10               MOVE.L    (A0),-(A7)
  2152. 0000002C: 4EBA 0000          JSR       FixIt1(long double)
  2153. 00000030: 2600               MOVE.L    D0,D3
  2154. 00000032: 486E FFF4          PEA       $FFF4(A6)
  2155. 00000036: 4EBA 0000          JSR       FixIt2(long double *)
  2156. 0000003A: 2800               MOVE.L    D0,D4
  2157. 0000003C: 594F               SUBQ.W    #$4,A7
  2158. 0000003E: 486E FFF4          PEA       $FFF4(A6)
  2159. 00000042: A844               _X2Fix
  2160. 00000044: 201F               MOVE.L    (A7)+,D0
  2161. 00000046: 2A00               MOVE.L    D0,D5
  2162. 00000048: 594F               SUBQ.W    #$4,A7
  2163. 0000004A: 484B               BKPT      #$3
  2164. 0000004C: A844               _X2Fix
  2165. 0000004E: 201F               MOVE.L    (A7)+,D0
  2166. 00000050: 2C00               MOVE.L    D0,D6
  2167. 00000052: 4CDF 0C78          MOVEM.L   (A7)+,D3-D6/A2/A3
  2168. 00000056: 4E5E               UNLK      A6
  2169. 00000058: 4E75               RTS
  2170. 0000005A
  2171.  
  2172. I don't know 68000 assembler, but I can see that FixIt1 and FixIt2 are
  2173. identical up to the instruction before returning.  This does not seem
  2174. correct since one is passed a pointer and one is passed a 10 byte
  2175. extended value.  Just before the last _X2Fix in main is this
  2176. instruction: BKPT.  Is that the illegal instruction?   What is it?
  2177.  
  2178. The workaround as with the 6.0.1 version of the bug is to always
  2179. use X2Fix on a local copy of an extended value, not a pointer or a
  2180. reference.
  2181.  
  2182. +++++++++++++++++++++++++++
  2183.  
  2184. >From N.Perry@massey.ac.nz (N.Perry)
  2185. Date: Wed, 13 Apr 1994 09:08:22 GMT
  2186. Organization: School of Maths & Info. Sci., Massey University, Palmerston North, NZ
  2187.  
  2188.  
  2189. Jeff DuMonthier <jeff.dumonthier@gsfc.nasa.gov> has posted that a bug
  2190. in the compilation of extended *arg being passed to X2Fix is still in
  2191. 7.0. I looked into this and discovered that the problem is even worse
  2192. than Jeff thought :-( The following function:
  2193.  
  2194. Fixed FixIt5(extended *x)
  2195. {
  2196.         extended *h = x;
  2197.         Fixed f = X2Fix(*h);          //< ouch!
  2198.         return f;
  2199. }
  2200.  
  2201. produces the code:
  2202.  
  2203. FixIt5(long double *):
  2204. 00000000: 4E56 0000          LINK      A6,#$0000
  2205. 00000004: 48E7 1020          MOVEM.L   D3/A2,-(A7)
  2206. 00000008: 202E 0008          MOVE.L    $0008(A6),D0
  2207. 0000000C: 2440               MOVEA.L   D0,A2
  2208. 0000000E: 594F               SUBQ.W    #$4,A7
  2209. 00000010: 484A               BKPT      #$2
  2210. 00000012: A844               _X2Fix
  2211. 00000014: 201F               MOVE.L    (A7)+,D0
  2212. 00000016: 2600               MOVE.L    D0,D3
  2213. 00000018: 4CDF 0408          MOVEM.L   (A7)+,D3/A2
  2214. 0000001C: 4E5E               UNLK      A6
  2215. 0000001E: 205F               MOVEA.L   (A7)+,A0
  2216. 00000020: 584F               ADDQ.W    #$4,A7
  2217. 00000022: 4ED0               JMP       (A0)
  2218.  
  2219. Now a BKPT is not very good for your Mac - I think a crash is
  2220. inevitable :-( (For 68K hackers, the hex 484A looks like an attempt to
  2221. code up PEA (A2), a non-existant instruction...)
  2222.  
  2223. I'll send it off to Symantec tech support.
  2224.  
  2225. Hope this helps someone *before* their Mac locks up!
  2226.  
  2227. Cheers,
  2228.     Nigel
  2229.  
  2230. -- 
  2231. Dr Nigel Perry                    Email: N.Perry@massey.ac.nz
  2232. Department of Computer Science    Tel: +64 6 356 9099 ext 8900
  2233. Massey University                 Fax: +64 6 350 5611
  2234. Palmerston North, New Zealand
  2235.  
  2236. +++++++++++++++++++++++++++
  2237.  
  2238. >From Ron_Hunsinger@bmug.org (Ron Hunsinger)
  2239. Date: Sat, 16 Apr 94 17:20:27 PST
  2240. Organization: Berkeley Macintosh Users Group
  2241.  
  2242. N.Perry@massey.ac.nz (N.Perry) writes:
  2243.  
  2244. >Now a BKPT is not very good for your Mac - I think a crash is
  2245. >inevitable :-( (For 68K hackers, the hex 484A looks like an attempt to
  2246. >code up PEA (A2), a non-existant instruction...)
  2247.  
  2248. PEA (A2) is a perfectly valid instruction, exactly equivalent in speed,
  2249. code size, and function to MOVE.L A2,-(A7).  Either would have been
  2250. correct in this sequence.
  2251.  
  2252. I think you meant to say "484A looks like an attempt to code up PEA A2, 
  2253. which is a non-existent instruction."
  2254.  
  2255. (Actually, it looks like they were trying to split the difference between 
  2256. PEA (A2) [4852] and MOVE.L A2,-(A7) [1F0A].  They got the sum of 4840 [PEA] 
  2257. and 000A [A2].  If they had started with 1F00 [MOVE.L ,-(A7)], or added 
  2258. 0012 [(A2)], they would have been OK.)
  2259.  
  2260. -Ron Hunsinger
  2261.  
  2262. +++++++++++++++++++++++++++
  2263.  
  2264. >From pottier@kayak.ens.fr (Francois Pottier)
  2265. Date: 17 Apr 1994 21:26:59 GMT
  2266. Organization: Ecole Normale Superieure, PARIS, France
  2267.  
  2268. In article <0013C774.fc@bmug.org>,
  2269. Ron Hunsinger <Ron_Hunsinger@bmug.org> wrote:
  2270.  
  2271. >(Actually, it looks like they were trying to split the difference between 
  2272. >PEA (A2) [4852] and MOVE.L A2,-(A7) [1F0A].  They got the sum of 4840 [PEA] 
  2273. >and 000A [A2].  If they had started with 1F00 [MOVE.L ,-(A7)], or added 
  2274. >0012 [(A2)], they would have been OK.)
  2275.  
  2276. Do you guys really know all these opcodes by heart ? I'm amazed!
  2277.  
  2278. -- 
  2279. Francois Pottier
  2280. pottier@dmi.ens.fr
  2281.  
  2282. ---------------------------
  2283.  
  2284. End of C.S.M.P. Digest
  2285. **********************
  2286.  
  2287.  
  2288.  
  2289.